hallo,
im Rahmen einer C#-Anwendung soll eine Delphi-
dll eine C#-Methode mit Parametern aufrufen, also ein "callback" Thema.
Dazu wird von der C# Anwendung die aufzurufende C#-Funktion in der Delphi-
Dll registriert, ein Funktionspointer ("delegate") übergeben. Dazu wird noch ein Testparameter übergeben.
Der testparamter wird korrekt nach Delphi übertragen, aber beim Aufruf der callback -Methode von Delphi aus nach C# klappts nicht:
In C# kommt irgendein 8-stelliger Zufallswert an, meistens derselbe, aber nicht immer.
Hier der Code der Delphi-
dll:
Code:
type TCallback = procedure(val: integer);
var callback : TCallback;
procedure RegisterCallback(aCallback : TCallback; value: integer); stdcall;
begin
callback:= aCallback; // registrieren...
ShowMessage('In Delphi:'+ IntToStr(value)); // erfolgreich wird "10" ausgegeben
callback(value); // ...und gleich testen
end;
exports
RegisterCallback;
Und hier der C#-Code
Code:
public partial class Form1 : Form
{
public delegate void ProcDelegate(int value);
[DllImport("DLLTest.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void RegisterCallback(ProcDelegate callBackHandle, int value);
public Form1()
{
InitializeComponent();
RegisterCallback(CalledFromDelphi,10);// in delphi registrieren, "10" als test mitgeben
}
public static void CalledFromDelphi(int value)
{
MessageBox.Show("Wert:" + value); // kommt leider nicht "10" an, sondern ein "Zufalls?"-Wert
}
}
Erwähnenswert ist noch dass die Messagebox in C# zweimal aufgerufen wird, beidesmal mit großen "Zufalls?"-zahlen, obwohl offensichtlich der callback nur einmal von Delphi aus aufgerufen wird.
Weiss leider nicht , auf welcher Seite die Fehler liegen, vermutlich eher auf C#-Seite ?
Danke.
Bert