Проблема с LoadLibrary в Vista

Тема в разделе "WASM.WIN32", создана пользователем vg, 13 фев 2010.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Не получается загрузить собственную dll в Vista через LoadLibrary и LoadLibraryEx. В XP и семёрке всё работает.
    LoadLibraryEx работате только если dwFlags = LOAD_LIBRARY_AS_DATAFILE или LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE или LOAD_LIBRARY_AS_IMAGE_RESOURCE, но мне это не подходит.
    После вызова LoadLibrary
    sxstrace.exe выдаёт
    Но, что из этого следует и как решить проблему?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Статус(NTSTATUS) какой и желательно на лог лодера посмотреть.
     
  3. expert

    expert New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    151
    Clerk
    скорей всего виста SP0 и ошибка ERROR_NOACCESS.
     
  4. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    SP1
    LoadLibrary возвращает NULL
    Как его получить?
     
  5. expert

    expert New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    151
    vg
    GetLastError что возвращает?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    vg
    RtlGetLastNtStatus()
    ShowSnaps.
     
  7. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    То, что я написал в первом посту - ERROR_SXS_CANT_GEN_ACTCTX 14001 (0x36B1)

    0xC0150002
    STATUS_SXS_CANT_GEN_ACTCTX

    Что это? :)
     
  8. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    vg
    >Но, что из этого следует и как решить проблему?
    Отсутствуют перераспространяемые компоненты времени выполнения, скорее всего.
    Выходы:
    1) пересобрать длл со статической crt (cl.exe /MT).
    2) пересобрать длл с динамической crt, но другой версии (не msvcrt90.dll, а msvcrt.dll). И убрать из манифеста ссылки на msvcrt90.
    3) установить на целевую систему перераспространяемые компоненты времени выполнения нужной версии (g: ms redistributable C runtime). Можно просто нужные длл в папку с приложением кинуть в крайнем случае.