2015-12-28 2 views
0

Я пытаюсь загрузить простую DLL с именем «MathLib.dll» для тестирования. Путь к DLL - D:\Desktop\MathLib\MathLib.dll. В этом коде dll всегда имеет значение null и печатается «Ошибка при загрузке».C++ LoadLibrary Возвращает Null

#include "stdafx.h" 
#include <Windows.h> 
#include <iostream> 

int main() 
{ 
    HINSTANCE dll = LoadLibrary(L"D:\Desktop\MathLib\MathLib.dll"); 
    if (dll == NULL) { 
     std::cout << "Failed to load"; 
    } 
    else { 
     std::cout << "Loaded!"; 
    } 
    std::cin.get(); 
    return 0; 
} 

Я думаю, что проблема связана с путями, но я не знаю, что бы я мог сделать по-другому.

+5

Вы должны избежать обратной косой черты в строковых литералов 'D: \\ Desktop \\ MathLib \\ MathLib.dll', или использовать необработанные строковые литералы. – Praetorian

+0

В окне «Окно» лучше всего использовать обратную косую черту при работе с дорожками. Таким образом, он автоматически ускользает от пробелов, а строка будет более разборчивой. – Brandon

ответ

0

В дополнение к комментарию Praetorian и ответам Майка о удвоении обратных косых черт, вы также должны убедиться, что загружаемая dll совместима с вашим кодом (т. Е. Если вы компилируете в x64, библиотека должна быть x64).

Предлагаю вам использовать GetLastError(). error code расскажет вам, где искать.

1

Моя непосредственная мысль ... и это может быть неправильно ... это то, что вы должны double эти обратные косые черты в вашей константе строки, чтобы они были интерпретированы как «буквально, обратная косая черта», а не escape-последовательность, подобная «\ n».

Мои инстинкты в том, что LoadLibrary не получает строку, в которую вы ее так думаете!

0

Вы должны использовать двойной обратная косая черта, как «\» используется для символьной последовательности побега

HINSTANCE dll = LoadLibrary(L"D:\\Desktop\\MathLib\\MathLib.dll")