CALLBACK-Funktionen über DLL geht nicht?
-
Hallo,
ich in meiner Anwedung eine Klasse der man einen Funktionszeiger übergibt und den diese dann bei Bedarf aufruft. Wie es so kommt haben wir diese Klasse zusammen mit eine paar anderen Dingen in eine dynamische LIB (als mit *.DLL) ausgelagert um die Sachen weitgehend unabhängig voneinader weiterentwickeln zu können.
Das sieht ungefähr so aus://DLL typedef void __stdcall DSB_EVENT(int evType, void* evBlock, int evBlockSize ); class __declspec(dllexport) DSBMessager { bool CreateDSBEvent( /* ... unwichtig*/ , DSB_EVENT* pEvCB ) { ... this->m_pEventCB = pEvCB; ... } ... };Allerdings funktionierte dann der ehemals perfekt funktionierende Aufruf der Funktionszeiger nicht mehr:
Das sieht so aus:... this->m_pActiveEvent( m_EvID, m_MSG, sizeof(m_MSG) );Wie gesagt: Das hat alles perfekt funktioniert als es noch keine extra Lib war.
Die Callbacks werden auch eindeutig aufgerufen, das habe ich im Debugger festgestellt, aber in der Exe die den Funktionszeiger übergeben hat kommt einfach nichts an.Möglicherweise weiß jemand woran das liegt und was man dagegen tun kann.
Danke!!
Sven.
-
Wenn ich es richtig verstehe versucht deine DLL eine Funktion der EXE über einen Funktionszeiger aufzurufen.
Das kann nicht funktionieren, weil sich die DLL in einem eigenen Adressraum befindet. Es kann nur eine EXE Funktionen einer DLL aufrufen.
-
Hallo,
danke das noch jemand geantwortet hat.
amartin755 schrieb:
Wenn ich es richtig verstehe versucht deine DLL eine Funktion der EXE über einen Funktionszeiger aufzurufen.
Das kann nicht funktionieren, weil sich die DLL in einem eigenen Adressraum befindet. Es kann nur eine EXE Funktionen einer DLL aufrufen.Sowas hab ich mir schon gedacht.
Ich frage mich nur warum ich dann z.B. der WinApi-Funktion "SetTimer" eine TIMERPROC übergeben kann, die dann auch per Callback aufgerufen wird, obwohl Aufruf ja auch es irgendeinem Windows-Prozess (ergo aus einem anderen Adressraum) geschieht. Oder wie ist das?Und wenn ich eine statische, statt dynamische, Lib mache, sollte es doch auch wieder gehen. (oder nicht?)
Sven.