2010-02-06 14 views
6

Wewnątrz aC# application aC# -metoda z parametrem ma być wywołana z biblioteki delphi: Wywoływana jest metoda C#, ale parametr int nie jest przesyłany poprawnie: pewna wartość "losowa" przybywa.Oddzwonienie z dll Delphi do C# app

C# -method jest przekazywany do dll delphi za pomocą metody rejestru:

[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 

    } 

A oto Delphi kod:

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; 

Co znajduje się również interesująca: metoda zwrotna dostaje dwa razy wywoływane (za każdym razem przychodzi wartość "losowa"), chociaż jest wywoływana tylko raz w kodzie. Po tym aplikacja ulega awarii z kodem wyjścia (0xc0000005).

Każdy pomysł?

Odpowiedz

4

Spróbuj

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

wystąpiły błędy:

zapomniał "STDCALL" w Delphi

typu TCallback = procedury (Val: całkowita); stdcall;

+0

oh, nie widziałem, aby odpowiedź została już udzielona przez gamecat ... – bert

Powiązane problemy