Dentro de la aplicación de CA # aC# -metodo con el parámetro debe invocarse desde un archivo DLL delphi: Se llama al método C#, pero el parámetro int no se transfiere correctamente: algún valor "aleatorio" llegaDevolución de llamada desde Delphi dll a la aplicación C#
El C# -method se pasa a la DLL de Delphi a través de un método de registro:
[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
}
Y aquí es el delphi código:
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;
Lo que también es interesante: el método de devolución de llamada se pone llamado dos veces (ambas veces llega un valor "aleatorio") aunque solo se llama una vez en el código. Después de eso, la aplicación se bloquea con el código de salida (0xc0000005).
¿Alguna idea?
oh, no veo que ya haya sido respondido por gamecat ... – bert