2010-02-06 108 views
6

內部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)。

任何想法?

回答

4

嘗試

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

發現錯誤:

忘記在Delphi 「STDCALL」:

類型TCallback =過程(VAL:整數); STDCALL;

+0

哦,沒有看到它已經被gamecat回答... – bert 2010-02-06 13:41:56

相關問題