Конференция "Прочее" » LoadLibrary возвращает 0. Из-за чего ?
 
  • DevilDevil (15.11.08 11:07) [0]
    Здравствуйте, уважаемые Мастера.

    существует Dll-файл "magic.dll", который лежит в текущей папке (папке exe-шника).

    На одной машине вызов LoadLibrary('magic.dll') возвращает 0, в то время как на других машинах загрузка Dll происходит нормально. При статической линковке возникает страшный Exception. Хотя, опять-таки, на других машинах всё ok.

    Сначала я подумал, что в какой-нить "C:\Windows\" есть попорченная  "magic.dll" и как раз её загрузить и не получается. Я переименовал Dll, вызываю LoadLibrary с новым именем, но результат прежний.

    Из-за чего это может быть? Помогите, пожалуйста.

    P.S. антивирус - NOD32. На другой машине с NOD32 всё работает нормально. Антивирусные базы одинаковые.
  • Sergey Masloff (15.11.08 11:11) [1]
    А GetLastError что говорит?
  • Юрий Зотов © (15.11.08 12:46) [2]
    > DevilDevil   (15.11.08 11:07)  

    Добавьте строчку:

    hLib := LoadLibrary('magic.dll');
    Win32Check(hLib <> 0);

    и сразу все станет ясно.
  • DevilDevil (15.11.08 13:50) [3]
    > Sergey Masloff   (15.11.08 11:11) [1]
    > Юрий Зотов ©   (15.11.08 12:46) [2]

    сегодня проверю. спасибо!
  • Правильный$Вася (15.11.08 19:26) [4]
    ntfs-Права на файл неподходящие?
  • DevilDevil (15.11.08 22:42) [5]
    System Error. Code: 14001.
    Приложение не было запущено, поскольку оно некорректно настроено. повторная установка приложения может решить данную проблему.

    > Правильный$Вася   (15.11.08 19:26) [4]

    dont understand.

    и там и там - администратор.
    и там и там - XP.
  • DevilDevil (16.11.08 00:39) [6]
    ERROR_SXS_CANT_GEN_ACTCTX
    14001
    0x36B1

    The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail.

    "Это что вообще за фигня ?"(с)
  • KilkennyCat © (16.11.08 01:25) [7]
    а точно в ней собака? может, она в свою очередь исчо че-то подвызывает?
  • Ляпа (16.11.08 01:40) [8]

    > существует Dll-файл "magic.dll"

    Э... а файлик, случаем, не на msvc80 собран?
  • DevilDevil (16.11.08 01:54) [9]
    Хех... "долбаный С++"(с) я.
    Проблему "решил", спасибо гуглу.

    "Гугл" посоветовал просмотреть системные логи. Обнаружились SideBySide ошибки 59 и 32.

    Как оказалось, проблема относительно часто встречается.
    Лечится скачиванием Microsoft Visual C++ 2005 Redistributable Package x86(2.6мб):
    http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLa%20%20ng=en&displaylang=en

    Всем участникам спасибо!
  • Ляпа (16.11.08 01:58) [10]

    > DevilDevil   (16.11.08 01:54) [9]

    Есть и другие способы лечения (но не всегда помогают)


    Create directory Microsoft.VC80.CRT next to your .exe and .manifest file. Create Microsoft.VC80.CRT.manifest file into that directory with data:

    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!-- Copyright ? 1981-2001 Microsoft Corporation -->
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
       <noInheritable/>
       <assemblyIdentity
           type="win32"
           name="Microsoft.VC80.CRT"
           version="8.0.50608.0"
           processorArchitecture="x86"
           publicKeyToken="1fc8b3b9a1e18e3b"
       />
       <file name="msvcr80.dll"/>
       <file name="msvcp80.dll"/>
       <file name="msvcm80.dll"/>
    </assembly>

    The versions of course has to match for one which was used to compile the application. After that just copy the 3 .dlls into that folder and you should be fine.
  • sniknik © (16.11.08 02:41) [11]
    > "Гугл" посоветовал просмотреть системные логи.
    гугл тебе просто перевел сообщение об ошибке...
    DevilDevil   (16.11.08 00:39) [6]
    > The application has failed to start because its side-by-side configuration is incorrect.
    > Please see the application event log for more detail.
    вот это как раз совет их посмотреть...
    учи английский.
  • DevilDevil (16.11.08 06:47) [12]
    > учи английский.
    неправильно выразился.

    гугл сказал как посмотреть логи.
    а когда ошибки были найдены - гул сказал как лечить.

    > Ляпа   (16.11.08 01:58) [10]
    но я так и не понял, из-за чего бага то ?
    на другиъх компах VC++ не установлен, хотя dll грузилась.
    подозреваю, что дело в 3м ServicePack-е, который стоит на других машинах и не стоит на этой (на этой - 2й).
  • KilkennyCat © (16.11.08 15:14) [13]

    > что дело в 3м ServicePack-е, который стоит на других машинах
    > и не стоит на этой (на этой - 2й).


    нет слов...
  • DevilDevil (16.11.08 17:14) [14]
    > KilkennyCat ©   (16.11.08 15:14) [13]
    типа умный что ли ?
  • Тыщ © (16.11.08 17:55) [15]
    DevilDevil   (15.11.08 11:07)

    Попробуй вызвать перед загрузкой DLL
    InitCommonControls();
  • KilkennyCat © (16.11.08 23:45) [16]

    > DevilDevil   (16.11.08 17:14) [14]

    нет, других слов...
  • DevilDevil (17.11.08 11:09) [17]
    > Тыщ ©   (16.11.08 17:55) [15]
    зачем?
 
Конференция "Прочее" » LoadLibrary возвращает 0. Из-за чего ?
Есть новые Нет новых   [134446   +31][b:0][p:0.001]