OpenThread nicht verfügbar?!
-
Hallo!
Hat jemand eine Ahnung, wie ich zur OpenThread() Funktion unter Win2000 Prof. komme?
In der MSDN stehtRequirements
Client: Requires Windows XP, Windows 2000 Professional, or Windows Me.
Server: Requires Windows Server 2003 or Windows 2000 Server.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.Die Header hab ich natürlich eingebungen, aber anscheinend gibts die bei mir nicht... Ich programmiere im Visual Studio 6.0...
Kann mir da jemand helfen?danke
mfG
Mike
-
Wieso meinst du, dass es die bei dir nicht gibt? Bekommst du Fehlermeldungen?
-
Wie wär's damit?
HANDLE OpenThread(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId) { typedef HANDLE (P_OT)(DWORD, BOOL, DWORD); P_OT* OT; HMODULE hLib; hLib = LoadLibrary( TEXT("Kernel32.dll") ); if(hLib) { OT = (P_OT*)GetProcAddress(hLib, TEXT("OpenThread")); if(OT) return OT(dwDesiredAccess, bInheritHandle, dwThreadId); else return NULL; } else return NULL; }
-
Du musst WIN_VER richtig definieren, ich glaub mit 0x501 (kann grad nicht nachschauen).
Wenn du dann <windows.h> (niemals <winbase.h>!) einbindest, müsste die Funktion bekannt sein.
-
Danke für eure Antworten!
a) Welche Fehlermeldung er hinschreibt? Ganz einfach
error C2065: 'OpenThread' : nichtdeklarierter Bezeichnerb) Danke das werd ich gleich mal probieren!
c) Hab ein bisschen mit der Winver rumgespielt, aber das hat auch nichts genützt!
Ich hab vorhin mal ein bisschen gegooglet: Google hat 10 Seiten gefunden und in der letzten stand etwas von einem typen der das gleiche problem hatte. dieser meinte das visual studio 6.0 unterstützt OpenThread nicht und dass man durch tricks die winbase austauschen kann bzw. sollte man gleich auf .NET wechseln.
Das halte ich alles für etwas unseriöse und plump.. das muss doch so auch gehen bitte...
danke erst mal!
-
ok, hab mal mitm dependency walker die kernel32 angesehen und die Funktion ist tatsächlich verfügbar

VIELEN DANK!
-
-
Hallo nochmal...
Ich habe hier ein Problem:
OT = (P_OT*)GetProcAddress(hLib, TEXT("OpenThread"));Bei dieser Anweisung stürtzt er ab und meint, dass der ESP nicht gesichert wurde, aufgrund einer falschen Aufrufkonvention.
Was muss ich da ändern? Irgend wo ein __stdcall oder __fastcall einbauen??bitte danke
-
Poochie schrieb:
c) Hab ein bisschen mit der Winver rumgespielt, aber das hat auch nichts genützt!
Das nehme ich dir nicht ganz ab. Wenn du in der platformsdk-doku unter dem Topic WINVER nachschlägst, findest du folgendes:
Windows XP: _WIN32_WINNT>=0x0501Und zwar auf der ersten Seite, ganz ohne suchen.

Definiere _WIN32_WINNT als 0x0501, dann ist die Funktion OpenThread bekannt (ich habe es eben getestet).
-
OpenThread funktioniert ausnahmsweise auch ohne diese defines. Vielleicht sollte das SDK einfach mal auf den neuesten Stand gebracht werden ...
-
Das heißt es ist auch in den älteren Windows Versionen verfügbar und nicht wie es im PSDK steht nur unter ab 2000 oder so?
-
Das heißt, daß OpenThread in <winbase.h> nicht in einem #ifdef/ #endif Block eingeschlossen ist. Die Doku ist aber trotzdem richtig, denn in den alten Headern fehlt der Prototyp völlig, und vermutlich fehlt's auch in den Import-Libs.
-
@cd9000:
Ich habe es definiert und er findet OpenThread() trotzdem nicht (in meiner winbase ist auch kein Prototyp drin!).Ich hab mir aber komischerweise das neueste SDK gesaugt..
Wie auch immer, jedenfalls habe ich mit
typedef HANDLE (__stdcall P_OT)(DWORD, BOOL, DWORD);zum Laufen gebracht!
vielen Dank!
-
Poochie schrieb:
Ich hab mir aber komischerweise das neueste SDK gesaugt..
Aber die Include-Pfade nicht angepasst, rate ich mal. Oder hast Du?