12. februar 2003 - 21:41
Der er
29 kommentarer og 1 løsning
Flere fejl ved compilering af program
Er der nogen der kan fortælle mig hvad der går galt her. #include <Psapi.h> DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return; // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name and process identifier for each process. CString processes; for ( i = 0; i < cProcesses; i++ ) { char szProcessName[MAX_PATH] = "unknown"; // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i] ); // Get the process name. if ( hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) { GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ); } } // Print the process name and identifier. processes += (CString)szProcessName + "," ; CloseHandle( hProcess ); } Jeg har under menuen Project - Settings på fanebladet som hedder 'Link' der hvor der står 'Object/Library modules:' skrevet navnet på psapi.lib, men får følgende fejl: Compiling... process1.cpp c:\program files\microsoft visual studio\jk\process1\process1.cpp(52) : fatal error C1010: unexpected end of file while looking for precompiled header directive Error executing cl.exe.
Annonceindlæg fra DE-CIX
12. februar 2003 - 21:44
#1
Der mangler forhåbentligt lidt kode mellen #include og første if statement !
12. februar 2003 - 21:46
#2
Jeg har set den fejl, når jeg har loadet en ikke Visual C++ fil ind i Visual C++ stedetfor at lave en ny fil i Visual C++ og så copy-paste kode fragmenter ind. Så måske skulle du prøve at bruge den lille workaround.
12. februar 2003 - 21:51
#4
Jeg har ændret koden til : #include <Psapi.h> HMODULE ModuleArray[100]; DWORD PIDArray[100]; DWORD cbNeeded,cbNeeded1; char PathBuffer[512]; int NumOfProcesses,NumOfModules; CString processes; CString tmp; if (EnumProcesses(PIDArray,sizeof(PIDArray),&cbNeeded)) { processes +="EnumProcesses OK\n\n-------------------------\n"; NumOfProcesses = cbNeeded / sizeof(DWORD); tmp.Format("%d Processes Found\n-------------------------\n",NumOfProcesses); processes += tmp; for (int i=2; i<NumOfProcesses; i++) { tmp.Format("Process ID : %d\n",PIDArray[i]); processes += tmp; HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS ,false,PIDArray[i]); if (!hProcess) continue; if (EnumProcessModules(hProcess,ModuleArray,sizeof(ModuleArray),&cbNeeded1)) { processes += "ProcessModules OK\n"; NumOfModules = cbNeeded1 / sizeof(HMODULE); for (int j=0; j<NumOfModules; j++) { GetModuleFileNameEx(hProcess,ModuleArray[j],PathBuffer,511); processes += (CString)PathBuffer + ",\n" ; } processes +="-------------------------\n\n"; }else { processes +="ProcessModules Failed\n"; } CloseHandle(hProcess); } }else { processes += "EnumProcesses Failed"; } Men får samme fejl ??
12. februar 2003 - 21:52
#5
Det der er ihvertfald ikke et ready-to-compile stykke kode.
12. februar 2003 - 21:58
#6
Ok ?? Hvad mangler der, for jeg læser da spørgsmålet som et svar ? Som de skriver skal man bare huske include filen i starten og linke Psapi.lib som beskrevet i starten af mit spørgsmål. Er jeg helt galt på den ?
12. februar 2003 - 22:01
#7
Ja - jeg fortsår heller ikke helt det svar du linkede til. Der er ingen funktions-erklæring inden den første if statement. Det skal der være for at det er legalt C/C++ syntax.
12. februar 2003 - 22:18
#9
Det eksempel ser syntaktisk korrekt ud. Kunne du prøve og få Visual C++ wizarden til at generere et tomt projekt og du så copy paster denne kode ind uden at slette det som Visual C++ har genereret.
12. februar 2003 - 22:25
#10
Tænker du på File->new->Project ? Hvis ja, hvilken skal jeg vælge ? Win32 Application ? Jeg spørger fordi jeg er ret ny i C/C++ og kan ikke rigtig fatte forskellen på Win32 Application og Win32 Console Application
12. februar 2003 - 22:29
#11
En Win32 Application er en GUI app. En Win32 Console Application er en kommando-linie / tekst app. Da MS eksemplet bruger printf skal det være en Console Application.
12. februar 2003 - 22:45
#12
Har prøvet det du siger og valgte "A simple Application" : // test8.cpp : Defines the entry point for the console application. // #include "stdafx.h" int main(int argc, char* argv[]) { return 0; } #include <windows.h> #include <stdio.h> #include "psapi.h" void PrintProcessNameAndID( DWORD processID ) { char szProcessName[MAX_PATH] = "unknown"; // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); // Get the process name. if (NULL != hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) { GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ); } else return; } else return; // Print the process name and identifier. printf( "%s (Process ID: %u)\n", szProcessName, processID ); CloseHandle( hProcess ); } void main( ) { // Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return; // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name and process identifier for each process. for ( i = 0; i < cProcesses; i++ ) PrintProcessNameAndID( aProcesses[i] ); } Får fejlen : Compiling... test10.cpp c:\program files\microsoft visual studio\jk\test10\test10.cpp(4) : fatal error C1083: Cannot open precompiled header file: 'Debug/test10.pch': No such file or directory Error executing cl.exe.
12. februar 2003 - 22:49
#13
Når jeg kigger i c:\program files\microsoft visual studio\jk\test10\debug så findes der ingen fil der hedder test10.pch ??
12. februar 2003 - 22:52
#14
Har du en test10.h i dit projekt ?
12. februar 2003 - 22:54
#15
Nej kun en StdAfx.h
12. februar 2003 - 22:57
#16
Jeg er løbet tør for ideer nu. Og jeg kan desværre ikke teste det selv, fordi jeg 2500 km fra min PC'er med Visual C++. :-(
12. februar 2003 - 23:00
#17
Du får de 100 points for indsatsen. Tak for forsøget. Er der andre de har nogle bud er der stadig 100 points at tjene.
13. februar 2003 - 09:01
#18
Det er fordi dit projekt bruger pre-compiled headers! Dette gør kompileringen hurtigere, men kræver at du includer "stdafx.h" øverst på din .cpp-fil. altså: #include "stdafx.h" Du kan også slå det fra eller lade compileren styre det automatisk. Det gøres under Project->Settings, fanebladet C++, Category=Precompiled Headers. Her skal du vælge "Not using precompiled headers" eller "Automatic use of precompiled headers"
13. februar 2003 - 09:37
#19
jpk har ret, du skal enten fravælge precompiled headers på den enkelte fil / hele projektet, eller tilføje #include "stdafx.h" miknil
13. februar 2003 - 17:36
#20
hmm... #include "stdafx.h" i starten virker ikke, det gør det derimod med : "Det gøres under Project->Settings, fanebladet C++, Category=Precompiled Headers. Her skal du vælge "Not using precompiled headers" eller "Automatic use of precompiled headers" så får jeg ingen compileringsfejl, men jeg får følgende fejl når jeg prøver at lave en .exe fil : Compiling... StdAfx.cpp Linking... test20.obj : error LNK2001: unresolved external symbol _GetModuleBaseNameA@16 test20.obj : error LNK2001: unresolved external symbol _EnumProcessModules@16 test20.obj : error LNK2001: unresolved external symbol _EnumProcesses@12 Debug/test20.exe : fatal error LNK1120: 3 unresolved externals Error executing link.exe. test20.exe - 4 error(s), 0 warning(s)
13. februar 2003 - 17:41
#21
Så linker du ikke mod psapi.lib !
13. februar 2003 - 17:56
#22
Næh det har du ret i, nu virker det. Hvordan får jeg "dos vinduet" til at forblive åbent efter afvikling ? Jeg kan ikke nå at se hvad der står i dos vinduet da det lukker med det samme.
13. februar 2003 - 18:01
#23
Du kan enten åbne en DOS box manuelt og CD'e ned i det rigtige directory og køre programmet. Ellers så kan du sætte: system("PAUSE"); ind sidst i dit main program. (kræver en #include <stdlib.h> hvis ikke du har den i forvejen)
13. februar 2003 - 18:01
#24
Åhh, jeg kan se det ved at "kører programmet" inde fra C++. Det er kun når jeg prøver at afvikle filen fra "run" eller explorer det lukker.
13. februar 2003 - 18:03
#25
Ok, det prøver jeg. Jeg bliver lige nødt til at løbe en ½ time, så må vi finde ud af det med pointsfordeling.
13. februar 2003 - 20:34
#26
Er der nogen af jer der er intereseret i point som tak for hjælpen. så meld lige i ud så jeg kan få oprettet et spørgsmål. Tak for hjælpen under alle omstændigheder.
13. februar 2003 - 20:47
#27
Jeg har fået point en gang. Og dem er jeg helt tilfreds med. Jeg vil selvfølgelig ikke protestere, hvis du absolut vil give mig nogle point ! :-) Men jpk kunne godt fortjene nogle point.
14. februar 2003 - 14:29
#28
george >> hvis du har kunnet bruge min information til noget, vil jeg da heller ikke protestere mod at få et par point kastet efter mig...
14. februar 2003 - 15:40
#29
Det var faktisk dit og Arne_v's svar der fik det til at funke. så jeg opretter lige et spørgsmål som du kan svarer på. Er du interesseret i at tjene 500 points ?
Kurser inden for grundlæggende programmering