Проблемма с подключением файла .lib к проекту на VC++ 6

Тема в разделе "LANGS.C", создана пользователем ska15, 16 ноя 2009.

  1. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Я пишу консольное приложение на C, которое вызывает некоторые функции dll. Для того чтобы подключить lib файл этой dll, я указал в проекте путь и имя файла lib. При выполнении link'а возникает следующая ошибка:
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    В чем причина и как исправить эту проблемму?
     
  2. reversecode

    reversecode Guest

    Публикаций:
    0
    в ващем приложении нет функции main() ?
     
  3. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    видимо, нестандартно обозвали.

    main.c в студию.
    (лучше бы весь прожект)
     
  4. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Вот код основной функции модуля, который вызывает dll функции.

    // =================================================================
    // MAIN PROGRAM
    // =================================================================

    DWORD Main (DWORD argc, PTBYTE *argv, PTBYTE *argp)
    {
    DWORD dOption, dOptions, i, j;
    BOOL fPlus;

    printf (atAbout);

    if (argc < 2)
    {
    printf (atUsage, atArguments);
    printf (atMoreInfo);
    }
    else
    {
    dOptions = OPTION_DEFAULT;

    for (i = 1; i < argc; i++)
    {
    switch (argv [0])
    {
    default:
    {
    DisplayModule (argv , dOptions);
    break;
    }
    case '+':
    case '-':
    {
    for (j = 0; argv [j]; j++)
    {
    dOption = 0;

    switch (argv [j])
    {
    case '+':
    {
    fPlus = TRUE;
    break;
    }
    case '-':
    {
    fPlus = FALSE;
    break;
    }
    case 'h':
    case 'H':
    {
    dOption = OPTION_SECTIONS;
    break;
    }
    case 'e':
    case 'E':
    {
    dOption = OPTION_EXPORTS;
    break;
    }
    case 'd':
    case 'D':
    {
    dOption = OPTION_DIRECTORIES;
    break;
    }
    case 'c':
    case 'C':
    {
    dOption = OPTION_CODEVIEW;
    break;
    }
    case 'p':
    {
    dOption = OPTION_PUBSYM;
    break;
    }
    case 'P':
    {
    dOption = OPTION_PUBSYM_EX;
    break;
    }
    case 'f':
    case 'F':
    {
    dOption = OPTION_FPO;
    break;
    }
    case 'm':
    case 'M':
    {
    dOption = OPTION_MISC;
    break;
    }
    case 's':
    case 'S':
    {
    dOption = OPTION_SOURCE;
    break;
    }
    case 't':
    case 'T':
    {
    dOption = OPTION_TARGET;
    break;
    }
    case 'x':
    case 'X':
    {
    dOption = OPTION_ALL;
    break;
    }
    }
    if (dOption)
    {
    if (fPlus) dOptions |= dOption;
    else dOptions &= ~dOption;
    }
    }
    break;
    }
    }
    }
    }
    return 0;
    }

    // =================================================================
    // END OF PROGRAM
    // =================================================================
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ska15
    Что это ещё за сигнатура? Переделайте в стандатрную. int main (); или int main (int argc, char* argv[]);
     
  6. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
  7. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Это код Свена Шрайбера из его книги "Недокументированные возможности Windows 2000"))).
     
  8. _DEN_

    _DEN_ DEN

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

    Не хотелось бы рушить твои детские иллюзии... Но знаешь... Можно быть гражданином и вполне себе спокойно издавать книги.
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Я бы для начала посмотрел в хексе объектный модуль и увидев там _Main исправил бы "опечатку" в исходнике. В те далекие времена в России еще кое-где были только БОЛЬШИЕ БУКВЫ :)
     
  10. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Т.е. необходимо написать: DWORD main (DWORD argc, PTBYTE *argv, PTBYTE *argp)
     
  11. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Что необходимо исправить?Подскажите пожалуйста.
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ska15
    Вы где-нибудь видите использование параметра argp? Повторяю, использовать стандартную сигнатуру main.
     
  13. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Попробовал DWORD Main (DWORD argc, PTBYTE *argv), та же проблема(.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ska15
    Читайте пост N5. Не зставляйте повторять одно и тоже, тут не попки.
     
  15. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Как я понимаю ошибка не в вызывающей программе. Так как в этом случает ошибка будет выглядеть так(я изменил имя функции Main на Min:
    w2k_cv.obj : error LNK2001: unresolved external symbol _Main
    У меня же ошибка
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    Видимо в это происходит моей dll-ке, т.е. Link ищет в Lib файле функцию main и не находит. Я правильно понимаю?
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Напишите номер страницы книги или путь на диске к исходнику.
     
  17. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Путь:
    D:\src\w2k_cv\w2k_cv.c
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Может на vc6 такое и работает. Но я уже написал что нужно сделать, не хочу войти в бесконечный цикл.
     
  19. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Да, непонятно....
     
  20. ska15

    ska15 New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    16
    Поменял сигнатуру на int main (int argc, char **argv)
    Теперь вот такой лог:
    Linking...
    Creating library Debug/w2k_img.lib and object Debug/w2k_img.exp
    Debug/w2k_img.dll : warning LNK4086: entrypoint "_W32Start" is not __stdcall with 12 bytes of arguments; image may not run
    w2k_cv.obj : error LNK2001: unresolved external symbol _WinMain@16
    Debug/w2k_img.dll : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.