Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Event in Dll in Delphi in einem C# Programm
ebber - Do 09.10.08 16:52
Titel: Event in Dll in Delphi in einem C# Programm
Hallo,
ich war mir nicht so sicher, aber ich glaube das passt mehr ins Delphi Forum wie ins C#.
Ich habe eine Dll in Delphi und habe darin ein Event von einer Komponente. Wie genau muss ich das jetzt deklarieren oder sowas um von meinem C# Programm(oder überhaupt von außen) Zugriff darauf zu bekommen? Geht das überhaupt?
MfG
Klabautermann - Mo 13.10.08 16:07
Hallo,
ich denke der erste Schritt heist erst einmal Callback-Funktion. Hier findest du ein kleines Beispiel:
http://www.delphi-forum.de/viewtopic.php?p=386566
Vom Prinziep läuft es so, du übergibst deiner DLL "zur Initialisierung" die Adresse der Funktion aus deinem Programm, welche bei dem Event ausgelöst werden soll. In deiner DLL schreibst du einen Eventhandler und vernüpfst ihn mit dem entsprechenden Ereigniss. Dieser macht dann nichts anderes als die Funktion, welche an der ihr bekannten Adresse liegt auf zu rufen.
Wie dass dann aus C# funktioniert ist eine Frage für das C#-Forum ;).
Gruß
Klabautermann
ebber - Do 16.10.08 14:22
Ok, scheint mir genau das zu sein was ich brauche. Danke.
Wenn ich nicht rausfinde wie das in C# funktioniert werde ich dort wohl mal Fragen.
MfG
ebber - Sa 25.10.08 18:22
Hallo,
ich dachte ich sollte nochmal schreiben wie das jetzt funktioniert:
Delphi Dll Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| TCallBack = procedure (count : integer); stdcall;
CallMainApp : TCallBack;
procedure onEvent(); begin CallMainApp(5); end;
function SetCallback(CallBackFunction: TCallBack): Boolean; stdcall; begin if Assigned(CallBackFunction) then begin CallMainApp := CallBackFunction; result := true; end else result := false;
end; |
C# Programm Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| [DllImport("Cappi.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void SetCallback(MulticastDelegate callback);
public delegate void CallbackDelegate(int count);
private void button1_Click(object sender, RoutedEventArgs e) { CallbackDelegate del = new CallbackDelegate(Callback); SetCallback(del); }
private static void Callback(int count) { Console.WriteLine("Param from Callback :" + count); } |
Ich hoffe es hilft jemand.
MfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!