- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 vc++ 中,我有一个包含两个项目的解决方案。项目 A 有一个 dllLoader.h
和 dllLoader.cpp
用 LoadLibrary
加载一个 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()
取决于您的项目是否配置为映射 TCHAR
至 char
对于 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::string
至 std::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/
new _Elem[_Size]() 与 new _Elem[_Size]{} 之间有什么区别,我应该更喜欢哪种形式? 如果您知道所讨论的元素并且未在模板参数中使用它,这会有什么不同吗? 这个问题假设
以前有人遇到过这个错误吗?我不知道究竟是什么导致了这种情况: 1>...include\sstream(640): error : "std::basic_ios::basic_ios(const s
这是我的第一篇文章。 我看了很多题目,似乎我做的还不错,但是当我尝试编译下面的代码时,我又遇到了上面的错误: // Header file #include #include #include
我无法理解这个错误。这个错误不在我正在调试的类中。 (是吗?)错误是: c:\program files\microsoft visual studio 10.0\vc\include\fstream
收到此错误,我很确定它在 operator::basic_ios' : cannot access private member declared in class 'std::basic_ios'
我需要将项目从 VS2003 转换到 VS2008。在以下代码中: wchar_t wpom[30]; mbtowc(wpom, "olaboga", 10); ati_dom::DOMString
我整个星期都在做这个家庭作业。就在程序最终运行时,我意识到仅使用 cin >> breed,如果我的输入有空格,它会破坏代码(因为我的程序需要收集 3 个单独的变量,首先是int,然后是字符串,最后是
我正在尝试使用 Microsoft 特定 filebuf::sh_none打开 fstream 的变量在独占模式(另一个 Microsoft 特定功能)。我收到上述错误。我正在进口 .我该如何解决这
我使用 fstream 打开文件进行写入。 fstream streamFile; streamFile.open ( "C:\\path\\to\\textFile.txt", fstream::
嘿,我收到一个错误,我认为这与从阅读其他帖子中复制 ofstream 变量有关,我已经尝试更改 std::ofstream outfil; 到 std::ofstream & outfil; 但是我得
嘿,我收到一个错误,我认为这与从阅读其他帖子中复制 ofstream 变量有关,我已经尝试更改 std::ofstream outfil; 到 std::ofstream & outfil; 但是我得
这个特定方法有问题,不知道如何解决!我得到的错误是上面的: "error C2248: 'std::basic_ios::basic_ios' : cannot access private memb
我在 MS visual studio 2005 的 Windows 上运行 Openipmp 客户端。尽管根据文档,它仅在 visual studio 6 和 MS visual studio .N
不幸的是,我的任务是编译一个旧的 C++ DLL,以便它可以在 Win 7 64 位机器上运行。我的 C++ 经验为零。我已经解决了其他问题,但是这个问题难倒了我,我还没有在其他地方找到解决方案。以下
在创建一个简单的异常类扩展(我可以在其中更轻松地构建错误消息)时,我将错误隔离为以下简单代码: #include #include class myCout { public: std::
给定以下代码, #include #include template void func() { std::basic_stringstream outStream; D suf
我似乎无法发现这里的错误,其他文章对错误的答案有点模糊所以这里是我的。我收到此错误,我相信它与它试图打开的文件有关。我发布了整个 .cpp 文件,因为我不确定错误的来源。 #include #inc
我在下面的代码中 str.append(ch); 行遇到了 abpve 错误。 我基本上想为每个 char 'ch' 附加 str。 如果有人知道这个问题,请更正我的错误。 int extract(u
我问这个问题是因为我有点无助:这个错误只发生在 Visual Studio 中,GCC 编译它没有错误甚至没有警告。由于这是一些可移植代码,我正在寻找一种适用于两种编译器的解决方案(最好的情况是不依赖
我正在将一个大型 VC++ 6.0 应用程序转换为 VS2010,并且在其中一个项目中一直遇到此错误: error C2248: 'std::basic_ios::basic_ios' : canno
我是一名优秀的程序员,十分优秀!