WINAPI Callback in C# **gelöst**
-
ich habe das Beispiel jetzt für mich angepasst.
habe aber noch eine Frage zu deinem c++ Code
Bringt der Commpiler bei dir beim aufruf des Callbacks keine Fehlermeldung?
void WindowsEnumerator::OnCallback(const TCHAR* windowText) const { _wrapper->OnCallback(gcnew String(windowText)); }
bei mir sagt er:
1>.\DllDotNet.cpp(30) : error C3767: "DllDotNet::CRWrapper::OnHandler::raise": Auf mögliche Funktion(en) kann nicht zugegriffen werden.
MfG
-
Nein. Ich rate mal: Du hast OnWindow zu OnCallback umbenannt...
Simon
-
Ok ich habe mich falsch ausgedrückt.
Ich habe das beispiel nachgebaut.
Meine Funktion ist:
void DllDotNet::CRead::Handler(TByte uwNumberOfDevices, TDWord *pListOfDevices,void *pTag) { RWrapper->OnCallbackHandler(uwNumberOfDevices,pListOfDevices,pTag); }
deshalb steht da ein anderer Name.
hier noch die Wrapper Klasse
public delegate void tKSdelDllHandler(int uwNumberOfDevices, void *pListOfDevices,void *pTag); public ref class CReadWrapper { private: CRead *pRead; public: event tKSdelDllHandler ^OnHandler; CReadWrapper() { pRead = new CRead(this); } ~CReadWrapper() { delete pRead; } void OnCallbackHandler(int uwNumberOfDevices, void *pListOfDevices,void *pTag) { OnHandler(uwNumberOfDevices,pListOfDevices,pTag); } };
und die c++ Klasse:
class CRead { private: gcroot<CReaderWrapper^> ReadWrapper; static void HandlerCallback(TByte uwNumberOfDevices, TDWord *pListOfDevices,void *pTag); public: CRead(CReadWrapper ^wrapper); void Handler(TByte uwNumberOfDevices, TDWord *pListOfDevices,void *pTag); };
und da bringt er die Fehlermeldung:
1>.\DllDotNet.cpp(30) : error C3767: "DllDotNet::CReadWrapper::OnHandler::raise": Auf mögliche Funktion(en) kann nicht zugegriffen werden.MfG
Edit: fehlende Funkion hinzugefügt
-
in der MSDN steht irgendwas von friend funktionen, die ich aber doch gar nihct benutze
komisch
-
Guck nochmals im Bsp. Du rufst in der CRead Klasse direkt den OnHandler event auf, im Bsp. wird der OnHandler aber in der CReadWrapper Klasse aufgerufen.
Simon
-
ja das wars