来自PowerBuilder的DLL调用

时间:2016-07-07 11:33:57

标签: c# c++ dll system-calls powerbuilder

我是开发人员 - 学生,我现在正在写我的学士论文。几天后,我对从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应用程序执行错误:   申请已终止。错误:行运行时函数引用错误...

我做错了什么?

3 个答案:

答案 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?