gpt4 book ai didi

c++ - 'HMODULE LoadLibraryA(LPCSTR )': cannot convert argument 1 from ' const _Elem *' to ' LPCSTR'

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:22 26 4
gpt4 key购买 nike

在 vc++ 中,我有一个包含两个项目的解决方案。项目 A 有一个 dllLoader.hdllLoader.cppLoadLibrary 加载一个 dll 我需要调用它在项目 B 中的功能。所以我将头文件和 cpp 文件复制并粘贴到项目 B。

Project A Main.cpp
------------------
#include "../Plugin/DllLoader.h"
#include "../Plugin/Types.h"
int main(){
std::string str("plugin.dll");
bool scuccessfulLoad = LoadDll(str);}

这是项目 A 中的 dllLoader(项目 B 中的镜像/拷贝随着此处的更改而更改)

bool LoadDll(std::string FileName)
{
std::wstring wFileName = std::wstring(FileName.begin(), FileName.end());
HMODULE dllHandle1 = LoadLibrary(wFileName.c_str());
if (dllHandle1 != NULL)
{ ****
return TRUE;
}

构建项目本身没有显示任何错误并成功完成,但是当我构建解决方案(包含其他项目)时出现错误

C2664 'HMODULE LoadLibraryA(LPCSTR)': cannot convert argument 1 from 'const _Elem *' to 'LPCSTR'

最佳答案

你的 LoadDll()函数需要 std::string作为输入,将它(以错误的方式 1)转换为 std::wstring ,然后将其传递给 LoadLibrary() .然而,LoadLibrary()不是真正的函数,它是一个扩展为 LoadLibraryA()预处理器宏LoadLibraryW()取决于您的项目是否配置为映射 TCHARchar对于 ANSI 或 wchar_t对于 UNICODE:

WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryA(
__in LPCSTR lpLibFileName
);
WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryW(
__in LPCWSTR lpLibFileName
);
#ifdef UNICODE
#define LoadLibrary LoadLibraryW
#else
#define LoadLibrary LoadLibraryA
#endif // !UNICODE

在您的情况下,编译失败的项目是为 ANSI 配置的,因此编译器错误是因为您传递了 const wchar_t*。至 LoadLibraryA()其中一个 const char*而是预期的。

最简单的解决方案是完全摆脱转换并调用 LoadLibraryA()直接:

bool LoadDll(std::string FileName)
{
HMODULE dllHandle1 = LoadLibraryA(FileName.c_str());
...
}

如果您仍想转换 std::stringstd::wstring 1,那么你应该调用LoadLibraryW()直接代替:

bool LoadDll(std::string FileName)
{
std::wstring wFileName = ...;
HMODULE dllHandle1 = LoadLibraryW(wFileName.c_str());
...
}

这样,您的代码始终与您的数据相匹配,并且不依赖于任何特定的项目配置。

1:转换 std::string正确方法到 std::wstring是使用适当的数据转换方法,例如Win32 MultiByteToWideChar()函数,C++11 的 std::wstring_convert类,第 3 方 Unicode 库等。传递 std::string std::wstring 的迭代器的构造函数不执行任何转换,它只是扩展 char原样值 wchar_t ,因此任何非ASCII char > 0x7F 的值将不会正确转换为 Unicode(UTF-16 是 Windows 对 wchar_t 字符串的 native 编码)。只有 7 位 ASCII 字符 (0x00 - 0x7F) 在 ASCII、ANSI 代码页、Unicode UTF 编码等中具有相同的值。更高值的字符需要转换。

关于c++ - 'HMODULE LoadLibraryA(LPCSTR )': cannot convert argument 1 from ' const _Elem *' to ' LPCSTR',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53002858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com