Я студент-разработчик, и сейчас я пишу дипломную работу. Уже несколько дней я отчаиваюсь из-за проблемы вызова DLL из Powerbuilder Classic 12.5.
Да, есть обсуждения по этому поводу, но я действительно очень старался, и ничего не работает … и мои коллеги тоже не смогли мне помочь.
У меня есть 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:
Приложение прекращено. Ошибка: неправильная ссылка на функцию во время выполнения в строке …
Что я сделал не так?
Я не эксперт C ++, но я всегда объявляю функции как WINAPI. Я думаю, что это отличается от stdcall, но я не помню в данный момент.
Часть; ansi необходима только при передаче строки, и функция ожидает ее как ANSI вместо Unicode.
Не используйте полный путь к файлу в объявлении.
Вероятно, это искаженное имя, которое вы пропускаете как псевдоним.
Также поместите dll в папку, где находится проект powerbuilder, а затем просто укажите … БИБЛИОТЕКА «GateWayFinal.dll» …
Вы пытались создать проект C ++, как описано здесь: http://www.rgagnon.com/pbdetails/pb-0123.html (особенно часть с картой и искаженным названием)
Похоже, это может быть проблема искажения имени. Ты можешь использовать Зависимость Уокер чтобы посмотреть реальное имя в DLL. Также посмотрите этот ТАК вопрос для получения дополнительной информации: Как мне остановить именование экспортированной функции моей DLL?