Как исправить загрузку DLL - PullRequest
0 голосов
/ 02 июля 2019

dll не загружается, я подозреваю, что есть проблема с типизацией.

Я типизировал LPCWSTR, но он не работает во время загрузки, если я даю путь непосредственно к загрузке, которая работает нормально. Но это не путь strFile.

HINSTANCE initH2oLibFilename(LPCSTR strFile, std::ostream& os)
{

HINSTANCE lib = LoadLibrary((LPCWSTR)strFile);
    if(!lib)
    {
        os << "Error loading \'" << strFile <<'\''<< std::endl;
        return NULL;
    }
}


HINSTANCE initH2oLibIF97(LPCSTR strPath, std::ostream& os)
{

    std::string strFile(strPath);
    strFile += "H2O32Bit.dll";
    return initH2oLibFilename(strFile.c_str(), os);
}

1 Ответ

1 голос
/ 02 июля 2019

CWSTR - использует 2 байта для каждого символа (WCHAR)

CSTR - использует 1 байт для символа (CHAR)

Выполняя приведение куказатель, он будет ссылаться на CSTR как CWSTR, это приведет к появлению тарабарщины вместо пути к файлу.Вы можете попытаться распечатать результат (LPCWSTR)strFile на консоли, он покажет вам, что я имею в виду.

На самом деле вам нужно будет преобразовать значения, а не просто навести указатели.

Вам потребуется использовать функцию mbstowcs_s для преобразования значений.

Вы можетеУзнайте больше о преобразовании типов в этой статье:

Дополнительно, вы никогда не должны использовать приведение в стиле c в c ++.Используйте соответствующий состав или комбинацию, например.static_cast.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...