2016-07-07 2 views
2

Я студент-разработчик, и сейчас я пишу диссертацию на степень бакалавра. С нескольких дней я отчаиваюсь от проблемы с вызовом DLL из Powerbuilder Classic 12.5.DLL-Call от PowerBuilder

Да, есть обсуждения об этом, но я действительно много пробовал, и ничего не работает ... и мои коллеги тоже не смогли мне помочь.

У меня есть DLL, запрограммированная на C++, которую я хочу вызвать. Глава Функция

__declspec(dllexport) bool __stdcall registerPbControl(unsigned long hctl); 

В PowerBuilder, я объявил глобальную внешнюю функцию:

FUNCTION boolean registerControl (ulong hctl) LIBRARY "C:\Users\...\GateWayFinal.dll" ALIAS FOR "registerPbControl;ansi" 

и команду Баттона в Powerbuilder:

boolean lb 
     lb = registerControl (handle (mle_1)) 

Когда я нажимаю кнопку, Я получаю эту ошибку:

PowerBuilder application execution error: Application Terminated. Error: Bad runtime Function reference at line ...

Что я сделал не так?

+0

Никогда не работал с PowerBuilder; однако это может быть несоответствие [вызывающего соглашения] (https://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx)? – CristiFati

ответ

2

Я не эксперт на C++, но я всегда объявляю функции WINAPI. Я думаю, что это отличается от stdcall, но я не помню на данный момент.

Эта часть ansi необходима только при передаче строки, и функция ожидает ее ansi вместо unicode.

Не используйте полный путь к файлу в объявлении.

+0

Этот. Вам нужно использовать WINAPI. –

1

Это, вероятно, искаженное имя, которое вы пропустили как псевдоним. также поставить DLL в папке, где проект PowerBuilder является и то только состояние ... БИБЛИОТЕКА «GateWayFinal.dll» ...

Вы пробовали создания C++ проекта, как описано здесь: http://www.rgagnon.com/pbdetails/pb-0123.html (особенно часть с Карта и искаженное имя)

Смежные вопросы