HINSTANCE einer statisch gelinkten DLL
-
Hallo,
wie kommt man eigentlich an die HINSTANCE einer statisch gelinkten DLL? Also statisch gelinkt ist jetzt vielleicht falsch ausgedrückt. Ich habe eine DLL die einfach ein paar Funktionen exportiert (__declspec(dllexport)). Der Compiler erstellt mir dann ein lib-File das ich dann in mein Hauptprojekt einbinde. Aber wie komme ich nun von meinem Programm an die HINSTANCE der DLL, damit ich z.B. Dialoge daraus laden kann? Würde ich sie wirklich dynamisch linken würde ich das ja per LoadLibrary erhalten. Aber so?
-
HINSTANCE hinst; BOOL WINAPI DllMain(HANDLE hinstDLL,DWORD dwReason,LPVOID lpvReserved) { ::hinst = hinstDLL; } DLLEXPORT HINSTANCE getDllInst() { return hinst; }
[ Dieser Beitrag wurde am 06.12.2002 um 15:27 Uhr von Nemesyzz editiert. ]
-
Kann man in diesem Fall nicht auch mit GetModuleHandle(NULL) arbeiten?
-
Ich glaube auch das die DllMain garnicht aufgerufen wird, wenn man die Funktionen mit der Importbibliothek einbindet.
-
Original erstellt von <Rie>:
Ich glaube auch das die DllMain garnicht aufgerufen wird, wenn man die Funktionen mit der Importbibliothek einbindet.*ROFL*
-
Könntest du mich bitte aufklären -King-? Ich weiß wirklich nicht bescheit.
-
Original erstellt von <Rie>:
Kann man in diesem Fall nicht auch mit GetModuleHandle(NULL) arbeiten?Nein, kann man nicht. Man bekommt immer den EXE-Namen, auch wenn man das so aus der Dll heraus aufruft:
If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process.
Das geht so, auch aus der EXE heraus:
GetModuleName(TEXT("mydll.dll"));
Oder man exportiert, wie bereits gesagt, ganz einfach eine zusätzliche Funktion.
-
Original erstellt von <Rie>:
Könntest du mich bitte aufklären -King-? Ich weiß wirklich nicht bescheit.DllMain wird aufgerufen, wenn die Dll in den Process geladen wird. Punkt.
-
danke das du mich aufgeklärt hast.
Ich lag total falsch.Ich dachte das das mit GetModuleHandle nur nicht funktioniert wenn die DLL dynamisch lädt und das in HeapWalkers Fall LibMain statt DllMain aufgerufen wird. Tschuldigung und danke nochmal.