c # — DLL-вызов из PowerBuilder

Я студент-разработчик, и сейчас я пишу дипломную работу. Уже несколько дней я отчаиваюсь из-за проблемы вызова 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:
Приложение прекращено. Ошибка: неправильная ссылка на функцию во время выполнения в строке …

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

2

Решение

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

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

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

3

Другие решения

Вероятно, это искаженное имя, которое вы пропускаете как псевдоним.
Также поместите dll в папку, где находится проект powerbuilder, а затем просто укажите … БИБЛИОТЕКА «GateWayFinal.dll» …

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

1

Похоже, это может быть проблема искажения имени. Ты можешь использовать Зависимость Уокер чтобы посмотреть реальное имя в DLL. Также посмотрите этот ТАК вопрос для получения дополнительной информации: Как мне остановить именование экспортированной функции моей DLL?

1
По вопросам рекламы [email protected]