Thread in DLL ausführen
-
Hi,
ich würde gern in einer DLL einen Thread ausführen. Leider bekomm ich beim Laden der DLL ein Segmentation Fault. Anbei mal mein Beispielcode:
DLL:
HANDLE aThread=NULL; DWORD WINAPI einThread(LPVOID lpParameter) { while(x) { something(); } } extern "C" __declspec(dllexport) void startThread(void) { aThread = CreateThread(NULL,0,einThread,NULL,0,NULL); }Main:
typedef void(* thread)(void); HMODULE hModule=NULL; thread th=NULL; int main() { hModule=LoadLibrary("bla.dll"); if(hModule!=NULL) { th=(thread)GetProcAddress(hModule,"startThread"); if(th!=NULL) th(); FreeLibrary(hModule); } Sleep(10000); return 0; }
-
Hast Du eine DllMain...?
-
Nein ich benutz nur diese eine exportierte Funktion.
-
Nachtrag:
SegmentationFault tritt nicht beim Laden der DLL auf, sonder beim Ausführen der Funktion.
-
versuchs mal mit
th=(thread)GetProcAddress(hModule,"_startThread");
-
Problem gelöst:
lag am falsch gesetzten Sleep(), bzw. daran das der Thread noch am laufen war als ich FreeLibrary aufgerufen habe.
Trotzdem Danke!
-
solltet du nicht prüfen obder Thread noch läuft bevor du
FreeLibrary(hModule);machst?
sollte die
DWORD WINAPI einThread(LPVOID lpParameter)nicht static sein?
-
sollte die
DWORD WINAPI einThread(LPVOID lpParameter)nicht static sein?
Muss nicht. Global geht auch.