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

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

  1. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    lukash
    У тебя packet.lib собрана как stdcall, а в проекте cdecl. Можно изменить в настройках проекта на stdcall, но придется перед _tmain поставить __cdecl.

    Твой код не собирается:
    Код (Text):
    1. // stdafx.h
    2. ...
    3. #define etherType  0x806 //0x800
    4. ...
    5. typedef struct etherner_Header
    6. {
    7. byte            dstAddr[6];
    8. byte            srcAddr[6];
    9. byte             ethType;             // byte?
    10. };
    11. ...
    12.  
    13.  
    14. // Ethernet.cpp
    15. ...
    16. pkt->eth.ethType = etherType;             // byte <- 0x806
    17. ...
     
  2. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    q_q

    Не совсем понял, можно подробней если не сложно.

    Ой, word.
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    lukash
    Не совсем понял
    Про calling convention?
    Где брал packet.lib, packet.dll и Packet32.h?
     
  4. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    q_q

    Да.
    packet.dll - WinPcap4.0.exe
    Packet32.h- из набора сорцов этого же проекта
    (http://www.winpcap.org)

    А packet.lib - сделан одним из МАСМовских тулзов из packet.inc:)
     
  5. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Я валенок! :)
    С начала скачал не тот архив (с www.winpcap.org) в котором не было packet.lib, вот я сам его и делал:) Просто я это сначала на асме это все сделал, и МАСМом с этим файлом все нормально было. Сейчас пошел опять на их сайт, нашел то что нужно (packet.lib), подключил в проект и все заработало!!!

    q_q
    Спасибо что подсказал!
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    lukash
    packet.lib - сделан одним из МАСМовских тулзов из packet.inc:)
    inc2l?
    В packet.inc случайно proto stdcall не написано?
    У меня не получилоь преобразовать ни один inс в lib, поэтому проверить поддерживает ли он proto C не смог.
     
  7. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    q_q

    Написано. packet.inc я сначала со статьи TermoSINteZ'а (ему за статью спасибо!) брал.

    Да.
     
  8. lcrowl

    lcrowl New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    72
    В общем не получается до конца одну задачку сделать. Задача так звучит:
    Write a program to copy its input to its output, replacing each tab by \t, each backspace by \b, and each backslash by \\. This makes tabs and backspaces visible in an unambiguous way. (по русски: напишите программу, которая копирует инпут в аутпут, заменяя каждый таб на \t, каждый бэкспэйс на \b и каждый бэкслэш на \\).

    вот такой код получился:

    Код (Text):
    1. #include <stdio.h>
    2.  
    3. main(){
    4.        int c;
    5.        
    6.        while((c=getchar())!=EOF)
    7.              switch(c){
    8.                        case '\t': printf("\\t");
    9.                                   break;
    10.                        case '\b': printf("\\b");
    11.                                   break;
    12.                        case '\\':  printf("\\\\");
    13.                                   break;
    14.                        default: putchar(c);
    15.                        }              
    16.                                  
    17.        
    18.        }
    Проблема в том, что \b на месте бэкспейсов не выводятся, чувствую что ступил где то, но где - понять не могу.

    ------------------
    Еще один вопрос немного не в тему. Как можно заставить gcc выводить ассемблерный листинг скомпилированной программы? Я понимаю, что man gcc, но там очень большой ман((.
     
  9. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    lcrowl
    Попробуй вместо \b сканкод.
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    lcrowl
    Проблема в том, что \b на месте бэкспейсов не выводятся
    Как ты вводишь backspace?
    Скормил твоему коду "текстовый" файл, в котором есть символы с кодом 0x08. Вывод содержал на их месте \b.
     
  11. lcrowl

    lcrowl New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    72
    Хмм, дело в том, что пока я работал чисто с экраном и поэтому не задумывался а как бэкспейсить в файле.. хмм. Тогда в принципе и нафиг не надо.
     
  12. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    как получить указатель на строку в структуре и просто на строку
    Код (Text):
    1. #include <windows.h>
    2.  
    3. struct struct1{char string1[21];};
    4. char string2="dsdsd";
    5.  
    6. void start()
    7. {   struct struct1* tempstruct;
    8.     tempstruct=&struct1();
    9.     lstrcpyn(&(tempstruct->string1),string2,10);};
    выдаёт ошибку
    error C2440: 'initializing' : cannot convert from 'const char [6]' to 'char'
    error C2664: 'lstrcpynA' : cannot convert parameter 1 from 'char' to 'LPSTR'

    пробовал разые варианты со *,& и без них ,ничего не получается. на С пишу 2 день и 2 день мучаюсь с этой с этой проблемой
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    tempstruct->string1
    &tempstruct->string1[0]
     
  14. mathio

    mathio New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    110
    censored
    а вообще, дабы новички сразу почувствовали всю суть референсов в Сях, им лучше показывать такие примеры 8-)
    Код (Text):
    1. #include <stdio.h>
    2.  
    3. struct
    4. {
    5.   unsigned char a[10];
    6. } q={"ABCDEF"},*w=&q;
    7.  
    8. int main()
    9. {
    10.   printf("string: %s\n",***(unsigned char(*)[1][2][3])(w->a));
    11.   return 0;
    12. }
    хотя, у кого-то может срывать крышу с такого, особенно после ассемблера).
     
  15. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    censored
    Спасибо, понял.
    теперь не могу разобраться с инклудами. прочитал что строка #include "erer.cpp" заменяется на сам файл erer.cpp. значит если я в главном cpp-файле напишу #include <windows.h> а затем буду инклудить второй cpp-файл то в нём будет определено всё из файла windows.h, но VC++ пишет ошибку
    "error C3861: 'MessageBox': identifier not found, even with argument-dependent lookup"
    а если я во втором cpp-файле напишу ещё раз #include <windows.h> то пишет
    "error LNK2005: "void __cdecl function11(void)" (?function11@@YAXXZ) already defined in test.obj" что же делать?
     
  16. n0name

    n0name New Member

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

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    n0name
    работает но не удобно
    значит так и буду делать , просто я описывал класс и писал для него функции в другом(одном) файле(думал, что надо так) и инклудил его.

    Спасибо за ответы!
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Consto
    Не надо его инклудить, тем более, если работаешь в проекте - все сишные файлы автоматически компилируются. Включать нужно только объявления.

    Это дело вкуса - писать тела методов сразу при объявлении или же выносить их в срр-файлы. В первом случае они автоматически инлайнятся, во втором случае не засоряется интерфейс.
     
  19. novIce

    novIce New Member

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

    Имеем BOOL EnumProcesses(
    DWORD* pProcessIds,
    DWORD cb,
    DWORD* pBytesReturned
    );
    pProcessIds - указатель на массив.
    cb - размер массива.
    pBytesReturned - кол-во байт возвращаемых в массив (вроде так перевел).

    Почему в примере Enumerating All Processes (MSDN)


    Код (Text):
    1. DWORD aProcesses[1024], cbNeeded, cProcesses;
    2.     unsigned int i;
    3.  
    4.     if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    5.         return;
    6.  
    7.     // Calculate how many process identifiers were returned.
    8.  
    9.     cProcesses = cbNeeded / sizeof(DWORD);
    1) Почему не &aProcesses
    2) Почему &cbNeeded этоже вроде указатель.

    Помогите разобрать сабж. :dntknw:
    Всем заранее спасибо!
     
  20. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    потому что название массива и есть указатель на массив(на его первый элемент)

    cbNeeded-переменная, &cbNeeded-указатель(адрес) на cbNeeded, тебе и надо передать указатель