Headerdateien mit windows.h
-
Warum kann man eig keine Funktionen aus windows.h in Net-Anwendungen verwenden?
Oder wie macht man das? Habe versucht, diese in Headerdateien auszulagern.
Da gibt aber LNK-Fehler, warum?
-
Warum kann man eig keine Funktionen aus windows.h in Net-Anwendungen verwenden?
Wieso?! Geht doch eh!
Oder wie macht man das? Habe versucht, diese in Headerdateien auszulagern.
Ui!
Da gibt aber LNK-Fehler, warum?
Ui!
PS: Also du hast noch einiges zu lernen. Mach das!!
-
Hallo Leute,
PS: Also du hast noch einiges zu lernen. Mach das!!
Das stimmt wohl, aber das bringt Heyo jetzt auch nicht weiter.
Also, nochmal so zum Mitmeißeln, Du hast versucht eine Headerdatei, nämlich die "Windows.h" in eine Headerdatei auszulagern.
Wieso?Oder verstehe ich das falsch.
Zeig doch bitte mal ein wenig Code.Gruß, Doug_HH
-
WAS kommen denn für Fehlermeldungen?
-
Also
Also, nochmal so zum Mitmeißeln, Du hast versucht eine Headerdatei, nämlich die "Windows.h" in eine Headerdatei auszulagern.
Wieso?Oder verstehe ich das falsch.
Zeig doch bitte mal ein wenig Code.nein, ich habe versucht in eigenen Funktonen die windows-Funktionen aufzufufen. Eine Klasse in ner Header, die Funktionen in ner cpp-Datei:
Header:
#ifndef _funktionen_ #define _funktionen_ class funktionen { public: void cursor_move( int x, int y); }; #endif
Cpp:
#include "stdafx.h" #include "Funktionen.h" #include <windows.h> void funktionen::cursor_move( int x, int y) { SetCursorPos( x, y); }
Wenn ich dann in der Form.h die Funktion aufrufe:
funktionen funk; funk.cursor_move( 1, 1);
kommen folgende Fehler:
Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A000009) ""extern "C" int __stdcall SetCursorPos(int,int)" (?SetCursorPos@@$$J18YGHHH@Z)", auf das in Funktion ""public: void __clrcall funktion::cursor_move(int,int)" (?cursor_move@funktion@@$$FQAMXHH@Z)" verwiesen wird. Funktionen.obj
Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall SetCursorPos(int,int)" (?SetCursorPos@@$$J18YGHHH@Z)" in Funktion ""public: void __clrcall funktion::cursor_move(int,int)" (?cursor_move@funktion@@$$FQAMXHH@Z)". Funktionen.obj
Fehler 3 fatal error LNK1120: 2 nicht aufgelöste externe Verweise. D:\Programme\Test\Code2\Debug\Code2.exe
Wieso?! Geht doch eh!
Wie denn? Sag mir einer was hab ich falsch gemacht?
-
Also ich anfangs hab ich versucht die Funktionen aus windows.h direkt in Form.h einzufügen. Da das dann aber die Fehler wie oben gab, dachte ich C++/CLI und windows.h vertragen sich nicht. Also habe ich sie getrennt. Ich war der Meinung, wenn eine andere Datei windows.h includiert wäre das Problem behoben, ist es aber nicht.
Ich hoffe ihr versteht mich, bitte antwortet!
-
Es sind Linker Errors, überprüfe deine Linker Settings und die eingebundenen Libraries (*.lib). Header Files spielen nur für den Compiler eine Rolle.
-
Füge mal ein
#pragma comment(lib, "User32.lib")
ein
-
Jochen Kalmbach schrieb:
Füge mal ein
#pragma comment(lib, "User32.lib")
ein
Hey, das ist genau das, was gefehlt hat.
Vielen Dank!
-
Bei SetCursorPos funkts ja, aber was muss ich bei folgendem Code für eine Library einbinden, damit ohne Fehler gelinkt werden kann:
HANDLE hToken; TOKEN_PRIVILEGES tkp; OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges( hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); ExitWindowsEx( EWX_FORCE|EWX_REBOOT, 0);
Fehlermeldungen:
Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A00000A) ""extern "C" int __stdcall AdjustTokenPrivileges(void *,int,struct _TOKEN_PRIVILEGES *,unsigned long,struct _TOKEN_PRIVILEGES *,unsigned long *)" (?AdjustTokenPrivileges@@$$J224YGHPAXHPAU_TOKEN_PRIVILEGES@@K1PAK@Z)", auf das in Funktion ""public: void __clrcall funktionen::windows_exit(void)" (?windows_exit@funktionen@@$$FQAMXXZ)" verwiesen wird. Funktionen.objFehler 2 error LNK2028: Nicht aufgelöstes Token (0A00000B) ""extern "C" int __stdcall LookupPrivilegeValueW(wchar_t const *,wchar_t const *,struct _LUID *)" (?LookupPrivilegeValueW@@$$J212YGHPB_W0PAU_LUID@@@Z)", auf das in Funktion ""public: void __clrcall funktionen::windows_exit(void)" (?windows_exit@funktionen@@$$FQAMXXZ)" verwiesen wird. Funktionen.obj
Fehler 3 error LNK2028: Nicht aufgelöstes Token (0A00000D) ""extern "C" int __stdcall OpenProcessToken(void *,unsigned long,void * *)" (?OpenProcessToken@@$$J212YGHPAXKPAPAX@Z)", auf das in Funktion ""public: void __clrcall funktionen::windows_exit(void)" (?windows_exit@funktionen@@$$FQAMXXZ)" verwiesen wird. Funktionen.obj
Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall AdjustTokenPrivileges(void *,int,struct _TOKEN_PRIVILEGES *,unsigned long,struct _TOKEN_PRIVILEGES *,unsigned long *)" (?AdjustTokenPrivileges@@$$J224YGHPAXHPAU_TOKEN_PRIVILEGES@@K1PAK@Z)" in Funktion ""public: void __clrcall funktionen::windows_exit(void)" (?windows_exit@funktionen@@$$FQAMXXZ)". Funktionen.obj
Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall LookupPrivilegeValueW(wchar_t const *,wchar_t const *,struct _LUID *)" (?LookupPrivilegeValueW@@$$J212YGHPB_W0PAU_LUID@@@Z)" in Funktion ""public: void __clrcall funktionen::windows_exit(void)" (?windows_exit@funktionen@@$$FQAMXXZ)". Funktionen.obj
Fehler 6 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall OpenProcessToken(void *,unsigned long,void * *)" (?OpenProcessToken@@$$J212YGHPAXKPAPAX@Z)" in Funktion ""public: void __clrcall funktionen::windows_exit(void)" (?windows_exit@funktionen@@$$FQAMXXZ)". Funktionen.obj
Fehler 7 fatal error LNK1120: 6 nicht aufgelöste externe Verweise. D:\Programme\Test\Code2\Debug\Code2.exe
-
Advapi32.lib
-> Suche im Google od. MSDN bzw. in der Doku. nach der Funktion die nicht gelinkt werden konnte: z.B. google -> AdjustTokenPrivileges -> 1. Ergebnis ergibt MSDN Seite zur Funktion. Zu unterst steht dann das Header File, die Lib und die DLL.
Simon
-
Ok, thx jetzt weiß ich mir das nächste Mal (bei solchen Linkerfehlern) selbst zu helfen. Konnte mit den Meldungen nämlich nix anfangen, wusste nicht, dass das so einfach sein kann ...
MfG
Heyo