gpt4 book ai didi

c++ - C++程序调用Delphi DLL函数时崩溃

转载 作者:行者123 更新时间:2023-11-30 03:09:05 27 4
gpt4 key购买 nike

我在 C++ 程序中有一个抽象类,看起来像

class Interface {
virtual void blah() = 0;
virtual int asdf() = 0;
};

并且该 C++ 程序允许您使用 LoadLibrary 加载 DLL。当您加载 DLL 时,它会调用 DLL 中名为 Setup with GetProcAddress 的函数,将指向 Interface 子类的指针作为参数传递。

我有一个模拟该类的 Delphi DLL,并像这样公开 Setup 函数:

type 
Interface = class abstract
procedure blah(); virtual; abstract;
function asdf() : Integer; virtual; abstract;
end;

function Setup(I : Interface) : Integer; export; cdecl;
begin
Result := 0;
end

exports Setup;

但是当程序调用该函数时,它崩溃了。如果我将函数设置更改为此:

function Setup(I : Pointer) : Integer; export; cdecl;

它工作正常并且不会崩溃,但是我当然不能就这样离开它,我需要能够使用该类。谁能告诉我我做错了什么?

最佳答案

<罢工>我不知道 C++,但 Delphi 接口(interface)是自动引用计数的(通过 IUnknown)。看起来您的界面在您尝试使用它时已经被破坏了。

编辑:抱歉,我很困惑:您没有使用接口(interface)。

Delphi 和 C++ 类不兼容,所以我认为这行不通。您必须将类更改为 COM 接口(interface)或函数指针记录。如果您无法控制 C++ 端,恐怕您就不走运了。

关于c++ - C++程序调用Delphi DLL函数时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420379/

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