c# – 非托管出口和代表

我正在使用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,所以我已经同意了.这是显而易见的事情.

点赞