Problem FreeLibraryAndExitThread( hModule, DWORD dwExitCode );
-
bitte ganz unten schauen..................
wie kann ich mittels einfachem c++ ein noch geöffnetes dx fenster schliessen?
habe eine dll geladen und diese nach beendigung der routine aus dem speicher geworfen, scheint aber nicht richtig zu funktionieren.wie kann man das noch bestehende fenster schliessen, denn bei mir kommt dann eben immer so eine schöne vista fehlermeldung.
die dll hab ich mit (int)0=42; gekickt, ist aber nicht mein code daher frage ich ob es was besseres gibt?
-
Also du möchtest das Fenster schliessen mit einem externen Programm, verstehe ich das richtig?
-
naja stell dir blitzbasic oder eine sonstige sprache vor.
du nimmst eine .dll mit dx9 unterstützung und lädtst sie in dieser sprache, nur beim schliessen bekomm ich das fenster davon halt nicht zu, die exe wird beendet, aber das fenster ist eben noch offen und produziert natürlich einen fehler.
inline c++ ist möglich, nur weiß ich niecht wie oder was.
-
x-tra schrieb:
naja stell dir blitzbasic oder eine sonstige sprache vor.
du nimmst eine .dll mit dx9 unterstützung und lädtst sie in dieser sprache, nur beim schliessen bekomm ich das fenster davon halt nicht zu, die exe wird beendet, aber das fenster ist eben noch offen und produziert natürlich einen fehler.
inline c++ ist möglich, nur weiß ich niecht wie oder was.
Also da liegt ein Fehler bei der Anwendung.

-
ja es gibt eben keinen befehl um eine dll komplett aus dem speicher zu werfen.
kann mir das denn niemand in c++ machen, ich hab da keinen plan davon!
bitte.
-
x-tra schrieb:
ja es gibt eben keinen befehl um eine dll komplett aus dem speicher zu werfen.
kann mir das denn niemand in c++ machen, ich hab da keinen plan davon!
bitte.Hiermit kannst du alles erreichen. Aber ich persönlich würde dir raten so eine schlechte Anwendung gar nicht erst zu nutzen.

http://msdn.microsoft.com/en-us/library/ms682584(VS.85).aspx
-
sind eben alles böhmische dörfer für mich.
also ich dachte erst mit CloseHandle, aber wie bekomm ich den handle raus, der noch läuft, und dann hab ich das gesehen: http://msdn.microsoft.com/en-us/library/ms683152(VS.85).aspxBOOL WINAPI FreeLibrary( __in HMODULE hModule );aber was kommt da rein hModule???? wie kann ich das rausbekommen?
dependency walker?!?
oder noch besser:
VOID WINAPI FreeLibraryAndExitThread( __in HMODULE hModule, __in DWORD dwExitCode );Parameters
hModule [in]
A handle to the DLL module whose reference count the function decrements. The LoadLibrary or GetModuleHandleEx function returns this handle.
Do not call this function with a handle returned by the GetModuleHandle function, since this function does not maintain a reference count for the module.
dwExitCode [in]The exit code for the calling thread.
Return Value
This function does not return a value. Invalid module handles are ignored.
-
habs jetzt soweit, dass ich weiß, dass man die winbase.h brauch, und die hab ich.
aaaber
Procedure KillDll: Inline FreeLibraryAndExitThread_( irgendwas.dll , lExitCode.l ) EndInline End Procedureeventuell noch mit
extern "C" {
}aber wie mach ich es, dass das auch aus der winbase.h geladen wird?
habs so probiert:
compilieren geht, aber stürzt bei verwendung ab....why?
INLINE #define _winbase_h_ DECLARE(FreeLibraryAndExitThread,"winbase.h",(const char*, int),void); DECLARE(GetModuleHandleA,"winbase.h",(const char*),const char*); extern "C" using namespace std; int main() { const char* hMod = GetModuleHandleA("Xors3d.dll"); FreeLibraryAndExitThread(hMod,0); } ENDINLINE