【发布时间】:2010-02-06 08:50:55
【问题描述】:
在 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)。
有什么想法吗?
【问题讨论】: