Problem mit Callback-Funktion

15/09/2008 - 14:26 von Karsten Kirchner | Report spam
Hallo zusammen,

ich bin gerade dabei eine C# (VS2005) -Anwendung zu implementieren. Dazu
binde ich eine CLR-Bibliothek ein, die in C++ (VS2005) implementiert wurde,
ein. Das ist ein Wrapper für eine Bibliothek die mit dem VS 6 entwickelt
wurde.

Jetzt habe ich nur das Problem, dass ich der Funktion in der CLR-Bibliothek
eine Callback-Funktion mitgeben muss, der Compiler generiert mir allerdings
immer ein Fehler. Folgende Entwicklungsschritte zusammengefasst:

Implementierung in der CLR-Bibliothek
//Funktionszeiger
typedef void (__stdcall * CALLB_TEXTOUT_W)(const char * text);

//Wrapper-Klasse in der CLR-Bibliothek
public ref class CWrap
{
public:
CWrap();
void RegisterTextOut(CALLB_TEXTOUT_W callBack);
}

Implementierung in einer Form für den Test

//Callback-Funktion die der Funktion in der CLR-Bibliothek übergeben werden
soll
private static void MyTextCallback()
{
MessageBox.Show("MyTextCallback wurde aufgerufen");
}

//C#-Projekt in der die Funktion mit der Callback als Übergabeparameter
aufgerufen wird
private void btnTest_Click(object sender, EventArgs e)
{
//obj ist eine Membervariable von der Klasse oben
obj.RegisterTextOut(MyTextCallback);
}

Hier ist jetzt das Problem, dass der Compiler den Fehler "Keine Überladung
für die MyTextCallback-Methode nimmt 1 Argumente an." ausgiebt.
Kann es sein, dass das irgendwie über eine Delegate-Deklaration funktioniert
? Ich habe keine Ahnung was da falsch làuft.

Kann jemand helfen ?

Besten Dank
 

Lesen sie die antworten

#1 Thomas Scheidegger
16/09/2008 - 00:30 | Warnen spam
Hallo Karsten


dabei eine C# (VS2005) -Anwendung zu implementieren.



scheint mir eher sekundàr,
solange etwa die (pure) managed-delegates Regeln eingehalten werden

eine CLR-Bibliothek ein, die in C++ (VS2005) implementiert



es geht also primàr um die Sprache 'C++/CLI',
somit im Prinzip NG:
microsoft.public.de.german.entwickler.dotnet.vc
(aber wenig frequentiert)

irgendwie über eine Delegate-Deklaration



ja, siehe C++/CLI 'delegate':
<URL:http://msdn.microsoft.com/en-us/lib...h.aspx>
<URL:http://msdn.microsoft.com/en-us/lib...5.aspx>

via event-proxy [ohne Gewàhr]:
<URL:http://mr-sharpoblunto.junkship.org...s.html>


RegisterTextOut



dem 'Register' Namen nach ist hier offenbar
Registrierung separat vom eigentlichen
(spàteren/asynchronen) Rückruf?
Daher muss Lifetime des Delegates
(jener der an native Code übergeben wird!)
zusàtzlich gewàhrleistet werden.
(zB ablegen in member-variable des wrappers)




Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen