gpt4 book ai didi

c++ - 在 Delphi 应用程序中调用 C++ DLL

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:37 26 4
gpt4 key购买 nike

我想在我的 Delphi 应用程序中调用 C++ DLL 的函数。
问题是我遇到了访问冲突。但不是在调用我的 C++ DLL 时,而是在我离开我执行此操作的 Delphi 函数时。

错误信息(缩写):
0x7445c9f1 处的访问冲突:从地址 0x00000000 读取。

我的C++方法是这样的:

extern "C" __stdcall void SetName(LPCTSTR name) {strcpy_s(nameInDll,512,name);};

我的 Delphi 调用如下所示:

begin   
...
hDll := LoadLibrary('myCpp.dll');
SetName := getprocaddress(hDll, 'SetName');
SetName(pchar(myControl.text)); // <--- exception NOT here
...
end; // <--- exception here

有趣的是,如果我像这样使用硬编码文本作为 DLL 调用的输入,它会起作用:

SetName(pchar('myName'));

编辑:
我错过了 C++ DLL 中的 __stdcall 定义。它是在宏中定义的。我更正了上面的 C++ 方法定义。

在看到那个和你的提示后,我想出了一个有效的解决方案:

procedure SetName(s: PChar); stdcall; external 'myCpp.dll';

begin
...
SetName(pchar(myControl.text));
...
end;

最佳答案

听起来像 SetName 使用了错误的调用约定,尝试使用 cdecl;

像这样:

var
SetName : procedure(nameArg: PChar); cdecl;

否则你的栈会乱了。

关于c++ - 在 Delphi 应用程序中调用 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com