內部ac#應用程序ac# - 參數的方法是從德爾福調用dll: C#方法被調用,但int參數傳輸不正確:一些「隨機」值到達。從Delphi的DLL回調到C#應用程序
C#的 - 方法是通過寄存器方法傳遞給德爾福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
}
這裏是德爾福代碼:
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)。
任何想法?
哦,沒有看到它已經被gamecat回答... – bert 2010-02-06 13:41:56