我正在使用Robert Giesecke Unmanaged Exports创建一个.NET包装器DLL,以便在Delphi 7中使用.NET DLL.到目前为止,一切正常,但现在我有一个需要有回调/委托的功能.
如何才能做到这一点?
我可以将函数指针指向我的.NET DLL并从那里调用它,当它是,它是如何完成的?
最佳答案 这很简单.您可以像使用标准p / invoke一样定义委托类型.
这是我能想到的最简单的例子:
C#
using RGiesecke.DllExport;
namespace ClassLibrary1
{
public delegate int FooDelegate();
public class Class1
{
[DllExport()]
public static int Test(FooDelegate foo)
{
return foo();
}
}
}
德尔福
program Project1;
{$APPTYPE CONSOLE}
type
TFooDelegate = function: Integer; stdcall;
function Test(foo: TFooDelegate): Integer; stdcall; external 'ClassLibrary1.dll';
function Func: Integer; stdcall;
begin
Result := 666;
end;
begin
Writeln(Test(Func));
end.
产量
666
C#端的默认调用约定是CallingConvention.Stdcall,所以我已经同意了.这是显而易见的事情.