DLL Problem
-
Mein Fehler, die Dll heißt natürlich dll.dll.
Ich probiere jetzt mal den kompletten Pfad an zu geben.
-
Das Programm, welches die DLL Inkludiert (ist ein Konsolenprogramm)
#include <cstdlib> #include <iostream> #include <stdio.h> #include <windows.h> using namespace std; typedef double (*AddNumbers)(double, double); int main(int argc, char *argv[]) { cout << "Loading DLL..." <<endl; // DLL Datei laden HINSTANCE hinstLib = LoadLibrary("C:\\Dev-Cpp\\projects\\dllcaller\\dll.dll"); if (hinstLib == NULL) cout << "hinstLib ist NULL" << endl; else cout << "hinstlib != NULL" << endl; system("PAUSE"); return EXIT_SUCCESS; }
Ergebnis ist:
Loading DLL...
hinstlib != NULL
Drücken Sie eine beliebige Taste . . .Scheint also, dass die DLL geladen wird. Wird jedoch kein MessageBox angezeigt?
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) { MessageBox(NULL, "!!! test !!!", "test", 0); ... ... ...
Sollte eigentlich schon in Ordnung sein, oder?
-
In DllMain darf man nur sehr beschränkt Code ausführen.
Details findest Du auf MSDN. Es ist fraglich ob der MessageBox Aufruf da erlaubt ist.Simon
-
In der MSDN steht:
Calling other functions may result in problems that are difficult to diagnose. For example, calling User, Shell, and COM functions can cause access violation errors, because some functions in their DLLs call LoadLibrary to load other system components. Conversely, calling those functions during termination can cause access violation errors because the corresponding component may already have been unloaded or uninitialized.
Ich denke MessageBox fällt da auch darunter, explizit steht es da aber nicht...
-
Vielen Dank!
Gibt es sonst ne Möglichkeit, wie ich eine MessageBox ausführen kann, sobald die DLL geladen wird?
Also ohne jetzt explizit eine Funktion aufrufen zu müssen?Initialization Function oder sowas?
Grüße
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-228560.html
Hier scheints auch zu klappen (?)
-
WinMain != DllMain
-
Überlesen...
Okay ich formuliers mal so:
Ich brauche eine DLL, welche eine MessageBox angezeigt, sobald diese von einem Programm geladen wird.Ist das möglich?
Wenn ja wie?Viele Dank
-
Es gibt da noch CWinApp::InitInstance.
Von welcher Klasse erbt deine DllClass-Klasse?
-
extern "C" int APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)