我是开发人员 - 学生,我现在正在写我的学士论文。几天后,我对从Powerbuilder Classic 12.5调用DLL的问题感到绝望。
是的,有关于它的讨论,但我真的尝试了很多,没有任何作用......我的同事们也无法帮助我。
我有一个用c ++编程的DLL,我想调用它。头功能
__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应用程序执行错误: 申请已终止。错误:行运行时函数引用错误...
我做错了什么?
答案 0 :(得分:3)
我不是C ++专家,但我总是将函数声明为WINAPI。我认为这与stdcall不同,但我现在不记得了。
只有传递字符串时才需要; ansi部分,函数需要它而不是unicode。
请勿在声明中使用完整的文件路径。
答案 1 :(得分:1)
这可能是您错过的错误名称作为别名。 还将dll放在powerbuilder项目所在的文件夹中,然后只显示... LIBRARY“GateWayFinal.dll”...
您是否尝试按照此处所述创建c ++项目:http://www.rgagnon.com/pbdetails/pb-0123.html(尤其是包含Map和错位名称的部分)
答案 2 :(得分:1)
听起来它可能是一个名称错位问题。您可以使用Dependency Walker查看DLL中的实际名称。另请参阅此SO问题以获取更多信息:How do I stop name-mangling of my DLL's exported function?