【问题标题】:DLL-Call from PowerBuilder来自 PowerBuilder 的 DLL 调用
【发布时间】:2016-11-09 17:00:33
【问题描述】:

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

我做错了什么?

【问题讨论】:

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


【解决方案1】:

我不是 C++ 专家,但我总是将函数声明为 WINAPI。我认为这与 stdcall 不同,但我现在不记得了。

;ansi 部分仅在传递字符串时才需要,并且函数需要它是 ansi 而不是 unicode。

不要在声明中使用完整的文件路径。

【讨论】:

  • 这个。您需要使用 WINAPI。
【解决方案2】:

这可能是您作为别名遗漏的错误名称。 还将 dll 放在 powerbuilder 项目所在的文件夹中,然后声明 ...LIBRARY "GateWayFinal.dll"...

您是否尝试过按照此处所述创建 c++ 项目:http://www.rgagnon.com/pbdetails/pb-0123.html(尤其是带有 Map 和损坏名称的部分)

【讨论】:

    【解决方案3】:

    听起来可能是名称修改问题。您可以使用Dependency Walker 查看DLL 中的实际名称。另请参阅此 SO 问题以获取更多信息:How do I stop name-mangling of my DLL's exported function?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多