2010-02-06 34 views
6

Bên trong aC# application aC# -method với tham số được gọi từ dll delphi: Phương thức C# được gọi, nhưng tham số int không được chuyển đúng: một số giá trị "ngẫu nhiên" đến.Gọi lại từ Delphi dll đến C# app

C# -method được truyền cho các dll delphi thông qua một phương pháp đăng ký:

[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 

    } 

Và đây là delphi mã:

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; 

gì cũng thú vị: các phương thức callback được được gọi hai lần (cả hai lần một giá trị "ngẫu nhiên" đến) mặc dù nó chỉ được gọi một lần trong mã. Sau đó ứng dụng gặp sự cố với mã thoát (0xc0000005).

Bất kỳ ý tưởng nào?

Trả lời

4

Hãy thử

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

tìm thấy lỗi:

quên "stdcall" trong Delphi:

loại TCallback = thủ tục (val: integer); stdcall;

+0

oh, không thấy nó đã được trả lời bởi gamecat ... – bert

Các vấn đề liên quan