从Delphi DLL到C#应用程序的回调

6
在一个C#应用程序中,需要从Delphi DLL调用带参数的C#方法: C#方法被调用,但是int参数没有正确传递:一些“随机”值到达。
通过注册方法将C#方法传递给Delphi DLL:
    [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
    public delegate void ProcDelegate(int value);

    private static ProcDelegate procDelegate;

    [DllImport("CallbackTest.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern void RegisterCallback(ProcDelegate callBackHandle, int value);


    public Form1()
    {
        InitializeComponent();

        procDelegate = new ProcDelegate(CalledFromDelphi);

        RegisterCallback(procDelegate, 10); // register in delphi dll


    }

    public static void CalledFromDelphi(int value)
    {
        MessageBox.Show("Value:" + value); // expect "10", but getting random value

    }

下面是 Delphi 代码:

type TCallback = procedure(val: integer);
var callback : TCallback;
procedure RegisterCallback(aCallback : TCallback; value: integer); stdcall;
begin
  callback:=  aCallback; 
  ShowMessage('Inside Delphi:'+ IntToStr(value)); // successful ("10")

  callback(value);  // ...and test callback
end;

exports
  RegisterCallback;

有趣的是,回调方法会被调用两次(每次都传递一个“随机”值),尽管在代码中只调用了一次。之后应用程序崩溃并显示退出代码(0xc0000005)。
有任何想法吗?
2个回答

4

尝试

type TCallback = procedure(val: integer); stdcall;

0
发现错误:
在Delphi中忘记添加“stdcall”:
类型TCallback = procedure(val: integer); stdcall;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接