Здравствуйте.
Проблема моя короткая – когда я включаю стандартные заголовчные файлы, то припопытке откомпилировать код мне выдается куча ошибок конкретно в этих файлах. В чем причина – понять не могу. Первый раз было при попытке сделать обработку нажатий клавиш посредством работы с WM_KEYDOWN. Ругался на winuser.h
Сейчас делаю свой монитор процессов на основе кода Джеффри Рихтера, взятого из книги (а точнее с диска, шедшего с книгой). Код Рихтера компилируется нормально, всё работает. Стал делать свое – одну функцию (повышение привилегий приложения) просто переписал под копирку, а как попытался откомпилировать – все, ругается на tlhelp32.h Причем очень активно – 215 ошибок нашел
Что за ерунда? я понять не могу
5 сентября 2008 в 12:02
Угу. cpp файлы не инклюдят. Если интересно почему, можешь написать в личку. Или просто немного почитать о том, как работают компилятор и линкер.
5 сентября 2008 в 9:05
Убери все #include "… .cpp", так не делается никогда.
5 сентября 2008 в 7:04
эм… а проблемы у меня не кончаются… почему-то вылазят ошибки линковщика (да! я хреновый программист!):
Linking…
procshot.obj : error LNK2005: "int __cdecl EnableDebugPrivileges(int)" (?EnableDebugPrivileges@@YAHH@Z) already defined in camera.obj
procshot.obj : error LNK2005: "void * __cdecl CreateSnapshot(unsigned long,unsigned long)" (?CreateSnapshot@@YAPAXKK@Z) already defined in camera.obj
я не особо понимаю, то чего, т.к. пару раз пробовал перед компиляцией затереть уже созданные файлы – не помогает, хоть тресни!
текст программы:
procshot.cpp:
#include <iostream>
#include <stdarg.h>
#include "camera.h"
using namespace std;
//BOOL EnableDebugPrivileges (BOOL bInit);
void main(int argc, char *argv[])
{
HANDLE hSnap;
char ch;
if(argc=2)
{
switch (argv[1][1])
{
case 'f':
cout << "List of processes will be in file!\n";
case 'c':
EnableDebugPrivileges(TRUE);
hSnap = CreateSnapshot(TH32CS_SNAPPROCESS,NULL);
cout << "List of processes will be in console!\n";
case 'k':
cout << "You want to kill process! Murderer!\n";
case 'h':
cout << "Help\n";
}
}
cin >> ch;
}
camera.cpp:
#include <windows.h>
#include <tchar.h>
#include <tlhelp32.h>
BOOL EnableDebugPrivileges (BOOL bInit)
{
BOOL fOk = FALSE;
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = bInit ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
fOk = (GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
return(fOk);
}
HANDLE CreateSnapshot(DWORD dwFlags, DWORD dwProcessID)
{
HANDLE hSnapHandle = INVALID_HANDLE_VALUE;
if(hSnapHandle!=INVALID_HANDLE_VALUE)
CloseHandle(hSnapHandle);
if(dwFlags==0)
{
hSnapHandle=INVALID_HANDLE_VALUE;
}
else
{
hSnapHandle=CreateToolhelp32Snapshot(dwFlags, dwProcessID);
}
return hSnapHandle;
}
camera.h:
#include "camera.cpp"
BOOL EnableDebugPrivileges (BOOL bInit);
HANDLE CreateSnapshot(DWORD dwFlags, DWORD dwProcessID);
cons.cpp (еще не инклудил):
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
BOOL ProcessFirst(HANDLE hSnap, PPROCESSENTRY32 ppe)
{
BOOL fOk = Process32First(hSnap,ppe);
if(fOk&&(ppe -> th32ProcessID==0))
fOk = Process32Next(hSnap,ppe); //убираем системный процесс Process32ID=0
std::cout << ppe -> szExeFile << ' ' <<ppe -> th32ProcessID << ' ' << ppe -> cntThreads << '\n';
return fOk;
}
4 сентября 2008 в 20:03
ВНИМАНИЕ!!!!!!!
Кто хочет реально ПОВЫСИТЬ РЕЙТИНГ СЕБЕ, а не другому – есть ТОЛЬКО
один шанс повысить его!!!
Многие люди тратят большие деньги для рейтинга
I.нужно отправить СМС(смс стоит 3.рублей) с текстом id17857484 на номер 4449
II.нужно отправить СМС(смс стоит 2 рублей) с текстом id17857484 на номер 4449
III.нужно отправить СМС(смс стоит 1 рублей) с текстом id17857484 на номер 4449
ИМЕННО ЭТИ ДЕЙСТВИЯ ЗАСТАВЛЯЮТ КОНТАКТ ОШИБАТЬСЯ, И ОН ДОБАВЛЯЕТ ТЕБЕ К РЕЙТИНГУ 370% И БОЛЕЕ…%
НО ЕСЛИ СДЕЛАТЬ ЭТО ТРИ РАЗА ПОДРЯД ТО РЕЙТИНГ УВЕЛИЧИТСЯ НА 1000% И БОЛЕЕ!!!!!!!!!
1)четыре таких смс с текстом id17821225 на номер 4449 – 630%
2)пять таких смс с текстом id17821225 на номер 4449 – 740%
Вот как это происходит: компьютер анализирует номер мобильного телефона, с которого было отправлено СМС, с номером мобильного телефона, указанного на странице пользователя, и добавляет в список оплативших.
(какой ваc устраивает, тот и выбирайте) (просто если подумать то лучше же видь сразу 5 смс отправить так экономнее)
смотрите сами как хотите
быстрее пока этот баг не отменили!
4 сентября 2008 в 10:01
эм… заинклудил windows.h – заработало )) я дурак ))
3 сентября 2008 в 22:01
Инклюдить windows.h. Через него подключаются все дефайны типа WINAPI.
Обычно студийные проекты по-умолчанию генерятся с stdafx.h, куда он иклюдится автоматом.
3 сентября 2008 в 18:00
Может, и не принципиально, но, наверное, всё же #include <windows.h>
3 сентября 2008 в 17:01
ну так и не будет работать.
#include "windows.h" добавь вначало, может еще че-то, походу узнаем.
3 сентября 2008 в 17:00
ну что ж, если просите – все выкладываю разом, весь BuildLog:
Compiling…
camera.cpp
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(30) : error C2146: syntax error : missing ';' before identifier 'WINAPI'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(30) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(30) : error C2146: syntax error : missing ';' before identifier 'CreateToolhelp32Snapshot'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(30) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(31) : error C2065: 'DWORD' : undeclared identifier
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(31) : error C2146: syntax error : missing ')' before identifier 'dwFlags'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(31) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(33) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(64) : error C2146: syntax error : missing ';' before identifier 'dwSize'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(64) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(64) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(65) : error C2146: syntax error : missing ';' before identifier 'th32ProcessID'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(65) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(65) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(66) : error C2146: syntax error : missing ';' before identifier 'th32HeapID'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(66) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(66) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(67) : error C2146: syntax error : missing ';' before identifier 'dwFlags'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(67) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(67) : error C4430: missing type specifier – int assumed. Note: C++ does not support d
3 сентября 2008 в 17:00
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(79) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(79) : error C2146: syntax error : missing ';' before identifier 'Heap32ListFirst'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(79) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(79) : error C2086: 'int WINAPI' : redefinition
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(30) : see declaration of 'WINAPI'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(80) : error C2146: syntax error : missing ')' before identifier 'hSnapshot'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(80) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(82) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(86) : error C2146: syntax error : missing ';' before identifier 'WINAPI'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(86) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(86) : error C2086: 'int BOOL' : redefinition
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(78) : see declaration of 'BOOL'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(86) : error C2146: syntax error : missing ';' before identifier 'Heap32ListNext'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(86) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(86) : error C2086: 'int WINAPI' : redefinition
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(30) : see declaration of 'WINAPI'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(87) : error C2146: syntax error : missing ')' before identifier 'hSnapshot'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(87) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(89) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(93) : error C2146: syntax error : missing ';' before identifier 'dwSize'
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(93) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int
c:\program files\microsoft visual studio 8\vc\platformsdk\include\tlhelp32.h(93) : error C4430: missing type specifier – int
3 сентября 2008 в 17:00
Далее по тексту все тоже самое
вот файл, к которому я подключаю этот заголовок:
#include <tchar.h>
#include <tlhelp32.h>
BOOL EnableDebugPrivileges (BOOL bInit)
{
BOOL fOk = FALSE;
HANDLE tHandle;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = bInit ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
fOk = (GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
return(fOk);
}
Порядок подключения заголовков меня. Ноль эффекта
Сама функция списана один в один у Рихтера. Только у него она почему-то работает, а у меня – нет
3 сентября 2008 в 16:04
похерил точку с запятой, скобку, етц
а мб неправильный порядок подключения заголовков
3 сентября 2008 в 16:03
неправильный SDK?
3 сентября 2008 в 16:02
ошибки в студию
3 сентября 2008 в 16:02
ошибка в 17 строке