我在 dll 中定义了以下接口:
class TestInterface
{
public: int foo(int)=0;
};
下面的函数让我创建这种类型的对象:
extern "C" declspec(dllexport) TestInterface* __stdcall CreateInterface();
该接口在 dll 中实现,我可以在 C++ 中毫无问题地使用它(我还定义了该.def
文件以确保一切正常)。但是,在帕斯卡中使用它时,我遇到了问题。
这是我尝试使用Interface
in pascal 的方式:
type
myinterface = interface(IInterface)
function foo(param1: Integer): Integer;
end;
TMyInterface = ^myinterface;
pCreateInterface = function: TMyInterface; stdcall;
var
CreateInterface: pCreateInterface;
在pascal中使用接口:
function init()
begin
DllHandle := LoadLibrary(DLLPath);
if DllHandle <> 0 then
begin
@CreateInterface := GetProcAddress(DllHandle, 'CreateInterface');
if (@GetXYZ <> nil) then
begin
dllInitialized := true;
myXYZ := CreateInterface();
myXYZ.foo(1); // Access violation error here
end;
end;
end;
一切似乎都很好。调试的时候,CreateInterface
执行成功,里面有一些值myXYZ
。但是当我尝试打电话时,foo
我得到了访问冲突错误。
我注意到我可以从 dll 调用不在任何类内的函数,但不能调用类/接口内的函数。
难道我做错了什么?我怎样才能做到这一点?
有没有一种方法可以在不更改 C++ 源代码的情况下在 delphi 中使用 C++ dll?