Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. novIce

    novIce New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    45
    Адрес:
    Russia
    Consto Спасибо за ответы.

    Но с последним аргументом чето неясно.
    Читаем MSDN: pBytesReturned
    [out] Number of bytes returned in the pProcessIds array.
    , этож количество байт возвращенных в массив, причем здесь указатель.
    Есть мысля что это указатель на переменную котороя сохранит значение кол-ва возвращенных байт.

    Извиняйте за ээээээээээээээээ несообразительность. :dntknw:
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    novIce
    так и есть. количество байт _реально_ записанных в массив. в эту переменную оно и запишется.
     
  3. novIce

    novIce New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    45
    Адрес:
    Russia
    n0name Спасибо за ответ.
    Хочу добить этот участок:

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    return;

    MSDN EnumProcesses: If the function succeeds, the return value is nonzero., If the function fails, the return value is zero..

    Мысля моя такая:Если EnumProcesses succeeds то !EnumProcesses false и управление на cProcesses = cbNeeded / sizeof(DWORD);

    Если EnumProcesses succeeds fails то !EnumProcesses true и управление на return (дык что возвращается).

    Зачем все так. Что то я подвис.
    Разъясните пожалуйста.
    Заранее спасибо за ответы!
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    novIce
    если ошибка то выходим (return). Сам же всё расписал. Вернул ошибку, то есть 0, то выполняется условие if'a.
     
  5. novIce

    novIce New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    45
    Адрес:
    Russia
    Дык все это только для того чтобы aProcesses <= cbNeeded / sizeof(DWORD) is TRUE
    Походу так.

    Всем спасибо!
     
  6. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    есть main.cpp, есть data.h
    если в main.cpp написать #include "data.h", то пишет "...already defined in main.obj", если не писать #include "data.h" то пишет "... andeclared identifier", если скопировать всё из data.h в main.cpp то всё нормально. всё это дело в MS VC++ 7.1. из-за чего это вообще может быть?
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    у тебя только эти 2 файла в проекте?
     
  8. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Могу предположить.
    Если ... already defined in main.obj, то main.obj exist. Тогда, возможно .h файл компилится как .cpp. В этом случае в Release mode вроде бы должно прокатить. Но ето неправильно, и следует смотреть настройки.
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Consto
    Есть такая штука: "Правило одного определения". Оно гласит, что любое определение в программе должно встречаться только один раз. Это значит, что в общем случае данные, функции, невстроенные методы классов не должны быть в h-файлах, так как последние могут включаться в несколько cpp-модулей. Для этого выносите в заголовочные файлы только объявления.
     
  10. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    IceStudent
    Если я не ошибаюсь, в заголовочных файлах нельзя задавать функций вообще. IMHO, здесь что-другое.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    dr_dred

    В C++ вообще нет таких понятий как .cpp или .h :)) Есть единица сборки. А из чего она там создается, компиллеру пофиг)
     
  12. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    _DEN_
    Что конкретно является единицей сборки?
     
  13. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    _DEN_
    У меня был BCPP 5.02, и я точно помню, что в свойствах каждого из подключаемых файлов можно было поставить тип компилера: c, cpp, h, rc и еще что-то там. У меня под рукой компа нет, но можно проверить так: взять windows.h и подключить его к проекту, точнее к списку файлов и написать #include <windows.h> в main.cpp. Дальше сделаем тоже самое еще раз, предварительно переименовав windows.h в windows.cpp. Если прокатит и так, значит правы Вы, а если только первым способом, то я, так надо полагать?
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    для каждого файла можно поставить собственныую утилиту компиляции. при добавлении файла среда смотрит на расширение и в соответствии с ним ставит утилиту компиляцию по умолчанию для этого типа файлов.
     
  15. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    сначала не правильно написал: 2 cpp-файла, оба инклудят data.h. Если убрать wndproc.cpp и записать функцию в main.cpp, то тоже работает. может надо кудато "extern" написать
    main.cpp
    Код (Text):
    1. #include <windows.h>
    2. #include "data.h"
    3. LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
    4.  
    5. void start()
    6. {   WNDCLASSEX wc;
    7.     MSG msg;
    8.     LOGBRUSH lb;
    9.     hInstance=GetModuleHandle(NULL);
    10.     CommandLine=GetCommandLine();
    11.    
    12.     wc.hIconSm=wc.hIcon=LoadIcon(hInstance,"500");
    13.     wc.cbSize= sizeof WNDCLASSEX;
    14.     wc.style=CS_BYTEALIGNWINDOW;
    15.       wc.lpfnWndProc=&WndProc;
    16.       wc.cbClsExtra=NULL;
    17.       wc.cbWndExtra=NULL;
    18.       wc.hInstance=hInstance;
    19.       wc.hbrBackground=0;
    20.       wc.lpszMenuName=0;
    21.       wc.lpszClassName=ClassName;
    22.       wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    23. RegisterClassEx(&wc);
    24. CreateWindowEx(WS_EX_LEFT,ClassName,ClassName,WS_OVERLAPPEDWINDOW+WS_VISIBLE, 0,0,800,570,NULL,0,hInstance,NULL);
    25.  
    26. while (GetMessage(&msg,NULL,0,0)!=0)
    27.       { TranslateMessage(&msg);
    28.         DispatchMessage(&msg);
    29.       };
    30.     exit:
    31.     ExitProcess(NULL);
    32. error_set:
    33. MessageBox(hWnd,error_set_mes,error_set_mes,  MB_ICONERROR + MB_OK+MB_TOPMOST);
    34. goto exit;
    35. };
    wndproc.cpp
    Код (Text):
    1. #include <windows.h>
    2. #include "data.h"
    3. LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    4. {
    5. return DefWindowProc(hwnd,uMsg,wParam,lParam);
    6. };
    data.h
    Код (Text):
    1. LPSTR CommandLine;
    2. HMODULE hInstance;
    3. HWND hWnd;
    4. char ClassName[]="rtrtrtrt";
    5. char error_set_mes[]="Ошибка сети";
    PS: если из wndproc.cpp убрать #include "data.h", то опять всё работает
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Что ты имеешь ввиду?
     
  17. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    IceStudent
    а где должны быть данные
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    у тебя 2 раза объвляются глобальные переменные с одинаковыми именами, если надо разделить их между c-файлами, то в хидеры перед каждой переменной поставь extern, а сами переменные перенеси в один из c-файлов.
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Consto
    Объявляться в h, определяться - в cpp и один раз:
    Код (Text):
    1. // data.h
    2. extern byte file_bin[];
    3.  
    4. // data.cpp
    5. #include "data.h"
    6. byte file_bin[] = {
    7.   0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00
    8. }
    9.  
    10. // main.cpp
    11. #include "data.h"
    12.  
    13. ...
    14.   WriteFile(hFile, file_bin, sizeof(file_bin), &cbWritten, NULL);
     
  20. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    IceStudent
    n0name
    Спасибо большое!! теперь вроде бы весь с++ понятен)