Компиляция куска программы из примеров Рихтера?

Тема в разделе "WASM.BEGINNERS", создана пользователем young_man, 11 авг 2006.

  1. young_man

    young_man New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2005
    Сообщения:
    117
    Адрес:
    Ukraine
    Добрый день.
    У меня Win2000SP4 CV++ 6.0
    Купил эту замечательную книгу читаю.
    Решил попробовать новые знания, написал тут програмку.

    Организуем объект типа "задание", накладывает ограниечение по используемой памяти и вносит в это задание процесс.

    Код (Text):
    1. #include "stdafx.h"
    2. //#include "CmnHdr.h"
    3. #include <winnt.h>
    4. #include <windowsx.h>
    5. #include <process.h>    // for _beginthreadex
    6. #include <tchar.h>
    7. #include <stdio.h>
    8.  
    9. //#include "Job.h"
    10.  
    11. int main(int argc, char* argv[])
    12. {
    13. HANDLE m_hJob;
    14. PSECURITY_ATTRIBUTES psa;
    15. PCTSTR pszName;
    16. JOBOBJECT_EXTENDED_LIMIT_INFORMATION joeli = { 0 };
    17.  
    18. STARTUPINFO si = { sizeof(si) };
    19. PROCESS_INFORMATION pi;
    20.  
    21. TCHAR sz[] = TEXT("CMD");
    22.  
    23. //DWORD dwDesiredAccess;
    24. //BOOL fInheritHandle;
    25. //m_hJob = CreateJobObject(psa, TEXT("JobLab"));
    26. m_hJob = CreateJobObject(NULL, NULL);
    27.  
    28. joeli.BasicLimitInformation.LimitFlags = 0;
    29. joeli.BasicLimitInformation.LimitFlags | JOB_OBJECT_LIMIT_PROCESS_MEMORY;
    30. joeli.ProcessMemoryLimit = s * 1024 * 1024;
    31.  
    32.  
    33. SetInformationJobObject(m_hJob,\
    34.                         JobObjectExtendedLimitInformation,\
    35.                         joeli,\
    36.                         sizeof(*pjoeli));
    37.  
    38. CreateProcess(NULL, sz, NULL, NULL,FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
    39.  
    40.  
    41. // Set Basic and Extended Limits
    42. AssignProcessToJobObject(m_hJob, pi.hProcess)
    43. ResumeThread(pi.hThread);
    44. CloseHandle(pi.hThread);
    45.  
    46.  
    47. HANDLE h[2];
    48. h[0] = pi.hProcess;
    49. h[1] = hjob;
    50.  
    51. DWORD dw = WaitForMultipleObjects(2, h, FALSE, INFINITE);
    52.  
    53. switch (dw - WAIT_OBJECT_0){
    54.  
    55. case 0: // процесс завершился
    56. break;
    57.  
    58. case 1:
    59. // лимит процессорного времени исчерпан
    60. break;
    61.  
    62. }
    63.  
    64. // проводим очистку
    65. CloseHandle(pi.hProcess);
    66. CloseHandle(hjob);
    67.  
    68.         return 0;
    69. }
    Дальше начать компилить и выдало ошибки -
    Код (Text):
    1. c:\program files\microsoft visual studio\vc98\include\winnt.h(152) : error C2146: syntax error : missing ';' before identifier 'WCHAR'
    2. c:\program files\microsoft visual studio\vc98\include\winnt.h(152) : fatal error C1004: unexpected end of file found
    3. Error executing cl.exe.
    Непонятно что даже делать с этим winnt.h, ну не редактировать же его ???
    Может я чего еще не знаю из каких-то дополнительных настроек?
    Помогите пожалуйста.
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    young_man
    Afaik компилятор не понял что-такое CONST (в 152 строке), который определен в windef.h.
    Резюме: до подключения winnt.h необходимо подключить windows.h. У Рихтера он подключается внутри CmnHdr.h.
     
  3. young_man

    young_man New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2005
    Сообщения:
    117
    Адрес:
    Ukraine
    А вот еще извините - вопрос.
    Где описана структура - JOBOBJECT_EXTENDED_LIMIT_INFORMATION???
    Поиск по диску в файлах *.h ничего, к сожалению, не дал.

    Как тогда компилировать такую программу ?
    Код (Text):
    1. #define _WIN32_WINNT 0X500
    2. #include <windows.h>
    3.  
    4. int main(int argc, char* argv[])
    5. {
    6.     HANDLE hjob=CreateJobObject(NULL,NULL);
    7.     JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };
    8.     jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
    9.     return 0;
    10. }
    ... постоянно не находит она эту структуру :dntknw:
    А в примерах , которыя найдены googl - ом так подключена только #include <windows.h>

    Код (Text):
    1. : error C2065: 'JOBOBJECT_EXTENDED_LIMIT_INFORMATION' : undeclared identifier
    2. : error C2146: syntax error : missing ';' before identifier 'jeli'
    3. : error C2065: 'jeli' : undeclared identifier
    4. .
    5. .
    6. .
    7. : error C2065: 'JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE' : undeclared identifier
    Подскажите, кто с "заданиями" по Рихтеру возился ?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    JOBOBJECT_EXTENDED_LIMIT_INFORMATION

    Header: Declared in Winnt.h; include Windows.h.
     
  5. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    В файле WinNT.h находится описание этой структуры. Чую тебе стоит поставить PSDK.
     
  6. young_man

    young_man New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2005
    Сообщения:
    117
    Адрес:
    Ukraine
    Stub
    IceStudent
    ... с боями скачал PSDK, инсталлировал.
    В папке C:\Program Files\Microsoft Platform SDK получил нужный набор *.h файлов.

    Как в пректе показать что необходимо помимо обычных папок с *.h файлами смотреть еще и в C:\Program Files\Microsoft Platform SDK ?

    Спасибо.
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Tools->Options->Directories; указать VS пути к либам (PSDK\lib) и к хидерам (PSDK\include)
     
  8. young_man

    young_man New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2005
    Сообщения:
    117
    Адрес:
    Ukraine
    censored
    ... спасибо!
     
  9. Benzin

    Benzin Сергей

    Публикаций:
    0
    Регистрация:
    26 авг 2007
    Сообщения:
    41
    Адрес:
    St.Petersburg
    Народ помогите пож-та, столкнулся тоже с проблемой, компилю в студии 2005, такой кусок:
    Код (Text):
    1. .....
    2. hJobOne = CreateJobObject(NULL, NULL);
    3.  
    4. JOBOBJECT_BASIC_LIMIT_INFORMATION myJobLI={0};
    5. ZeroMemory(&myJobLI, sizeof(JOBOBJECT_BASIC_LIMIT_INFORMATION));
    6. myJobLI.PriorityClass =  IDLE_PRIORITY_CLASS;  
    7. myJobLI.PerJobUserTimeLimit.QuadPart = 10000000;
    8. myJobLI.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_JOB_TIME;
    9.  
    10. SetInformationJobObject(hJobOne, JobObjectBasicLimitInformation, &myJobLI, sizeof(myJobLI));
    11. .....
    и мне выдает :
    error C3861: 'CreateJobObject': identifier not found
    error C3861: 'SetInforrnationJobObject': identifier not found
    точно так же и для структуры польз-го интерфейса:
    error C3861: 'SetInformationJobObject': identifier not found
    И при включении созданного процесса в задание
    error C3861: 'AssignProcessToJobObject': identifier not found

    В чем проблема? winnt.h подключать пробовал, ничего не изменилось
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Benzin
    windows.h подключил?
    Про 2 error - посмотри внимательно SetInforrnationJobObject RN вместо M.
     
  11. Benzin

    Benzin Сергей

    Публикаций:
    0
    Регистрация:
    26 авг 2007
    Сообщения:
    41
    Адрес:
    St.Petersburg
    q_q Опечатался я), но все равно изменил и тоже самое, так и выскакивают:
    1>.\name_1.cpp(277) : error C3861: 'CreateJobObject': identifier not found
    1>.\name_1.cpp(296) : error C3861: 'SetInformationJobObject': identifier not found
    1>.\name_1.cpp(309) : error C3861: 'SetInformationJobObject': identifier not found
    1>.\name_1.cpp(342) : error C3861: 'AssignProcessToJobObject': identifier not found

    windows.h подключен
     
  12. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Benzin
    http://msdn2.microsoft.com/en-us/library/aa383745(VS.85).aspx
    Перед подключением windows.h определи
    Код (Text):
    1. #define _WIN32_WINNT 0x500
     
  13. Benzin

    Benzin Сергей

    Публикаций:
    0
    Регистрация:
    26 авг 2007
    Сообщения:
    41
    Адрес:
    St.Petersburg
    diamond Спасибо большое!