BDS 2006 kennt GetModuleHandleEx nicht ???
-
Hallo !
Bin am verzweifeln, da ich den Grund nicht finde, warum die Funktion GetModuleHandleEx() in meinem Programm unbekannt ist.
Habe, anweisungsgemäß
#include <windows.h> #include <winbase.h>eingebunden und rufe sie mit
HMODULE hDLL = NULL; GetModuleHandleEx(0, "DLL_TestProjekt.dll", &hDLL);auf. Ich erhalte aber nur Fehlermeldungen. Laut Hilfe ist sie unter WXP verfügbar.
Wo liegt das Problem ?Danke.
-
MyOwnShadow schrieb:
Ich erhalte aber nur Fehlermeldungen.
Welche genau?
-
Einfach:
E2268: Aufruf einer undefinierten Funktion 'GetModuleHandleEx'GetModuleHandle kennt er, aber nicht GetModuleHandleEx ...
-
Schau mal in der winbase.h nach, ob diese Funktion dort deklariert ist und ob evtl. erst bestimmte defines gesetzt sein müssen.
Hier ein Auszug aus der MSDN:
To compile an application that uses this function, define _WIN32_WINNT as 0x0501 or later.
P.S:
Client: Requires Windows Vista or Windows XP.
-
Ja, eine derartige Abfrage macht den Ärger
#if _WIN32_WINNT > 0x0500 || defined(WINBASE_DECLARE_GET_MODULE_HANDLE_EX) || ISOLATION_AWARE_ENABLEDEs liegt an der Windows Versionsabfrage. Aber ist das nicht ein Parameter der vom Compiler selbst gesetzt wird ?
Ich benutze doch WXP prof. Multilanguage mit allen verfügbaren Updates.
Kann ich rauskriegen welchen Wert BDS2006 für _WIN32_WINNT angenommen hat ?
Oder muss ich den etwas selbst setzen ?
-
Habe jetzt herasugefunden, das BDS2006 in windows.h folgendes steht:
#if defined(__BORLANDC__) # ifndef _WIN32_WINNT # define _WIN32_WINNT 0x0500 /* If not set, assume NT 5.00 */ # endif # if defined(__cplusplus) # define NOMINMAX /* for WINDEF.H */ # else # define NONAMELESSUNION /* for OAIDL.H, OBJIDL.H,... */ # endif # if defined(_UNICODE) # define UNICODE # endif #endif /* __BORLANDC__ */Es wird also immer nur W2000 angenommen und nicht WXP.
So, nun kann ich den Wert ja auf 501 (WXP setzen), aber das mag mein Compiler ja nun gar nicht und meldet plötzlich aus der windows.hpp:
E2040: Deklaration nicht ordnungsgemäß abgeschlossen.static const Shortint WTS_CONSOLE_CONNECT = 0x1; static const Shortint WTS_CONSOLE_DISCONNECT = 0x2; static const Shortint WTS_REMOTE_CONNECT = 0x3; static const Shortint WTS_REMOTE_DISCONNECT = 0x4; static const Shortint WTS_SESSION_LOGON = 0x5; static const Shortint WTS_SESSION_LOGOFF = 0x6; static const Shortint WTS_SESSION_LOCK = 0x7; static const Shortint WTS_SESSION_UNLOCK = 0x8;Das liegt daran, dass diese Definitionen nun bereits in der winuser.h definiert werden.
Ich drehe mich also im Kreis. BDS2006 tut also so, als ob wir mit W2000 arbeiten.
-
MyOwnShadow schrieb:
Habe jetzt herasugefunden, das BDS2006 in windows.h folgendes steht:
#if defined(__BORLANDC__) # ifndef _WIN32_WINNT # define _WIN32_WINNT 0x0500 /* [b]If not set[/b], assume NT 5.00 */Also nix von wegen immer W2000.
Das Ganze steht in der windows.h des BCB2007 übrigens genauso, trotzdem wird GetModuleHandleEx dort erkannt.
Welchen Wert hat _WIN32_WINNT denn beim Programmstart bei dir?
-
MyOwnShadow schrieb:
Das liegt daran, dass diese Definitionen nun bereits in der winuser.h definiert werden.
Kommentiere sie einfach in Windows.hpp aus.
-
Wo hast du das define denn definiert?
Am besten du setzt es in den Projekt-Optionen und kompilierst noch mal dein gesamtes Projekt neu.