我需要从Delphi中调用一些C++代码。C++代码需要能够回调到Delphi代码。在这里显示的示例(从C++ DLL调用Delphi回调函数)效果非常好。但是,我想传递一个实现接口的Delphi对象而不是将单个Delphi函数作为回调传递给C++。
编辑:通过接口,我指的是C++术语,即具有纯虚函数的类。这不一定是使用Delphi关键字
编辑:通过接口,我指的是C++术语,即具有纯虚函数的类。这不一定是使用Delphi关键字
interface
定义的类型。换句话说,以下类定义了一个我想从C++中调用的接口:ICallable = class
procedure callMe stdcall; virtual; abstract;
procedure CallMeAgain stdcall; virtual; abstract;
end;
< p > ICallable
接口在 Delphi 中的实现如下:
MyCallable = class(ICallable)
procedure callMe override;
procedure callMeAgain override;
end;
procedure MyCallable.callMe
begin
WriteLine('I was called');
end;
procedure MyCallable.callMeAgain
begin
WriteLine('I was called again');
end;
在C++方面,编译为DLL,在其中,我希望定义如下ICallable接口:
class ICallable{
public:
virtual void callMe()=0;
virtual void callMeAgain()=0;
}
导出以下DLL函数,以便Delphi可以调用:
#define DllExport extern "C" __declspec( dllexport )
DLLExport bool Callback(ICallable* callable){
callable->callMe();
callable->callMeAgain();
return true;
}
最后回到Delphi:
function Callback(myCallable: ICallable) : Boolean cdecl; external 'dllname'
问题:
- 只有当C++和Delphi以相同的方式实现它们的虚方法表时,这才能起作用。情况是否如此?
IInterface
,例如通过从TInterfacedObject
派生。3. 从IUnknown
派生C++类。4. 嗯,就这样了,没有更多的了。 - David Heffernan