2012-06-17 5 views
7

Il codice che segue è tratto da here ho rimosso tutta la parte di Windows NT come sto lavorando su Windows 7.vs 2010: l'errore LNK2028:. Token irrisolto (0A000342) "extern "int C" __stdcall

ho copiato questo codice ed eseguire in Visual Studio 2010 (Nuovo progetto-> VC++ -> CLR-> CLR Console ...). Ma sta dando molti errori "c" extern non risolti come elencato sotto il codice. Che cosa ho torto errato?

#define STRICT 1 

#include <windows.h> 
#include <iostream> 
using namespace std; 

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) { 
DWORD dwThreadId, dwProcessId; 
HINSTANCE hInstance; 
char String[255]; 
HANDLE hProcess; 
if (!hWnd) 
return TRUE;  // Not a window 
if (!::IsWindowVisible(hWnd)) 
return TRUE;  // Not visible 
if (!SendMessage(hWnd, WM_GETTEXT, sizeof(String), (LPARAM)String)) 
return TRUE;  // No window title 
hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); 
dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessId); 
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); 
cout << hWnd << ' ' << dwProcessId << '\t' << String << '\t'; 
cout << "(None)\n"; 
CloseHandle(hProcess); 
return TRUE; 
} 

int main(int argc, char *argv[], char *envp[]) { 
EnumWindows(EnumWindowsProc, NULL); 
return 0; 
} 

Questo sta dando errori seguenti (e altri errori non risolti simili extern C)

1>wndowfind.obj : error LNK2028: unresolved token (0A000342) "extern "C" int __stdcall  
EnumWindows(int (__stdcall*)(struct HWND__ *,long),long)"  3 
([email protected]@[email protected]@[email protected]@Z) referenced in function "int __cdecl 
main(int,char * * const,char * * const)" ([email protected]@[email protected]) 

1>wndowfind.obj : error LNK2028: unresolved token (0A000346) "extern "C" unsigned long 
__stdcall GetWindowThreadProcessId(struct HWND__ *,unsigned long *)"  
([email protected]@[email protected]@[email protected]) referenced in function "int __stdcall 
EnumWindowsProc(struct HWND__ *,long)" ([email protected]@[email protected]@[email protected]) 

1>wndowfind.obj : error LNK2028: unresolved token (0A000347) "extern "C" long __stdcall 
GetWindowLongW(struct HWND__ *,int)" ([email protected]@[email protected]@[email protected]) referenced in 
function "int __stdcall EnumWindowsProc(struct HWND__ *,long)" 
([email protected]@[email protected]@[email protected]) 

1>wndowfind.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall 
EnumWindows(int (__stdcall*)(struct HWND__ *,long),long)" 
([email protected]@[email protected]@[email protected]@Z) referenced in function "int __cdecl 
main(int,char * * const,char * * const)" ([email protected]@[email protected]) 

1>c:\users\afnan\documents\visual studio 2010\Projects\wndowfind\Debug\wndowfind.exe : fatal 
error LNK1120: 10 unresolved externals 
1> 
1>Build FAILED. 

AGGIORNATO

Includendo le librerie (come suggerito nelle risposte), ero in grado di eseguire correttamente il programma. Ma io non sono in grado di capire il motivo per cui solo il primo carattere della stringa viene meno la stampa quella completa, come si può vedere nella uscita:

00010060 2652 S  (None) 
002502B2 5820 C  (None) 
00090402 5160 w  (None) 
00050392 5160 w  (None) 
00060292 3520 F  (None) 
000C02BA 3520 M  (None) 
0001021A 3736 E  (None) 
00040018 896 I  (None) 
00010170 3580 A  (None) 
0002003E 2684 D  (None) 
00030316 4956 N  (None) 
000202DE 3736 D  (None) 
0001031E 2652 S  (None) 
000100EA 2652 P  (None) 

Nell'output sopra, S è in realtà "start", C è " console "ecc ho confermato tramite spy ++ tool. Come posso stampare la stringa completa invece del solo primo carattere?

+1

Il progetto è probabilmente configurato per creare in Unicode, il che significa che è necessario utilizzare un array wchar_t anziché un array di caratteri. –

risposta

21

I progetti CLR per impostazione predefinita non includono le librerie di Windows standard, ad esempio user32.lib.

Modifica le proprietà del progetto, trova l'opzione Ingressi Linker e aggiungi kernel32.lib user32.lib advapi32.lib che sono le solite librerie necessarie per il codice Win32.

+0

Ha funzionato !!! si prega di consultare il mio aggiornamento sopra. – gpuguy

+0

Questo era inafferrabile. Grazie! – twip