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

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

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    IceFire
    впрочем, в обычном SDK такой либы нет, либо бери ее из DDK, если есть, либо.. остаются еще два варианта. Но про них потом
     
  3. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    в DDK есть такая либа. Щаз попробую, если это возможно.
     
  4. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui

    Взял либу ntdll.lib из DDK, положил в c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\, в коде написал: #pragma comment(lib,"ntdll.lib");
    ....
    все то же... (

    nitrotoluol

    А что такое инициализация API? (((
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    IceFire
    положи ее в один каталог с проектом или в "PlatformSDK\Lib"
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.331
    IceFire
    а надо положить в каталог, указанный в переменной окружения LIB.
    Узнать его можно, например, запустив с консоли echo %LIB%.

    Тут либы лежат в 6-й студии:
    D:\Program Files\Microsoft Visual Studio\VC98\Lib
     
  7. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui

    Там и лежит. В "PlatformSDK\Lib". Толку - нуль. (
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    IceFire
    ты же сказал: c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\
    впрочем, попробуй положить в каталог проекта
     
  9. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    rmn

    Положил в D:\Program Files\Microsoft Visual Studio .NET\VC\Lib

    Без толку... ((((
     
  10. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui

    Просто ошибся. Лежала там же, где написал в последнем посте. Щаз попробую в каталог проекта кинуть.
     
  11. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    А! Убейте меня (((( Не работае. Я эту ntdll.lib уже везде распихал... (

    Nouzui

    А какие еще есть способы? Или они сложней?
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    каталог проекта - это там, где vcproj
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    лан, еще вариант (кроме тех двух) приведи ПОЛНУЮ строку ошибки
     
  14. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui
    loaderDlg.obj : error LNK2019: unresolved external symbol _RtlInitUnicodeString referenced in function "public: void __thiscall CloaderDlg::OnBnClickedOk(void)" (?OnBnClickedOk@CloaderDlg@@QAEXXZ)
     
  15. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    гм, а это вообще VC? Давно я мфц не пользовался..
    Лан, неважно, попробуй поставит в свойствах проекта stdcall в качестве модели вызовов по умолчанию

    если у тебя восьмая студия: Configuration Properities->C/C++->Advanced->Calling Convention
     
  16. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    в общем, так:
    1. либо поставить __stdcall в свойствах, либо вписать его явно в объявление функции
    ошибка должна будет выглядеть так:
    unresolved external symbol _RtlInitUnicodeString@8

    если она выглядит как
    unresolved external symbol "void __stdcall RtlInitUnicodeString(struct _UNICODE_STRING *,unsigned short const *)" (?RtlInitUnicodeString@@YGXPAU_UNICODE_STRING@@PBG@Z)
    значит нужно или дописать перед объявлением extren "C", или заключить в extern "C" весь заголовочный файл целиком:
    extern "C"
    {
    #include <winternl.h>
    }

    если после всего этого ошибка все еще проявляется и имя функции не выглядит как "_RtlInitUnicodeString@8", значит, есть что-то еще, что я упустил из виду

    если ошибка осталась и имя функции именно такое: "_RtlInitUnicodeString@8", значит, нужно или вписать ntdll.lib в PropertyPages/Configuration Properities/LinkerInput/Additional Dependencies (потому что #pragma comment(lib,"ntdll.lib"); не сработал), или снова поразбираться с расположением ntdll.lib
     
  17. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui

    Да, это VC и MFC.

    Итак, что сделал:
    1. Раскидал ntdll.lib куда только можно.
    2. В коде написал:
    extern "C"
    {
    #include "winternl.h"
    }
    #pragma comment(lib,"ntdll.lib")
    #define WINAPI __stdcall

    Ошибка все еще выглядит вот так:
    loaderDlg.obj : error LNK2019: unresolved external symbol _RtlInitUnicodeString referenced in function "public: void __thiscall CloaderDlg::OnBnClickedOk(void)" (?OnBnClickedOk@CloaderDlg@@QAEXXZ)

    (((
     
  18. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    а это тут при чем?
    PropertyPages->Configuration Properities->C/C++->Advanced->Calling Convention
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    поставь stdcall calling convention
     
  20. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui

    Спасибо, все получилось. Благодарю вас.