【问题标题】:How to remove error of incompatible variable types in LoadLibrary() function?如何消除 LoadLibrary() 函数中不兼容变量类型的错误?
【发布时间】:2015-06-10 08:11:42
【问题描述】:

我的 C++ 程序中有一行

HINSTANCE hInstLibrary = LoadLibrary("DLL_tut.dll");

这里我收到错误消息说 error C2664: 'LoadLibraryW' : cannot convert parameter 1 from 'const char [12]' to 'LPCWSTR'

我正在尝试实现链接http://www.codeguru.com/cpp/cpp/cpp_mfc/tutorials/article.php/c9855/DLL-Tutorial-For-Beginners.htm中给出的程序

尝试找到一些解决方案并找到最接近的Incompatible var types 我认为,但我不明白如何隐藏该文件字符串,我猜这个问题的最后一个答案更合适。 有人可以建议如何消除此错误吗?

PS:不是一些家庭作业,对 dll 不熟悉,并试图自己理解。卡在这最后一步。

【问题讨论】:

  • 您可以尝试将参数包装在TEXT 宏中,如示例所示:msdn.microsoft.com/en-us/library/windows/desktop/…
  • 函数通常有 ANSI 和 Unicode 版本,但函数名称相同,因此使用 TEXT 宏将确保传递的类型是正确的类型,或者如果您的项目可以传递 L"DLL_tut.dll"只有 unicode 配置
  • 有什么区别,哪个更好用?
  • TEXT 宏将确保代码在 ANSI 或 unicode 配置中编译,因此更便携

标签: c++ dll types loadlibrary


【解决方案1】:

试试

HINSTANCE hInstLibrary = LoadLibrary(L"DLL_tut.dll");

HINSTANCE hInstLibrary = LoadLibrary(_TEXT("DLL_tut.dll"));

问题是您的项目可能是使用定义的 UNICODE 宏编译的,这导致 LoadLibrary 使用 LoadLibraryW 版本,该版本需要 Unicode 字符串作为参数。

【讨论】:

  • 好吧,这么简单的解决方案只有这个吗?该链接中提到有人更改设置。 (在我的问题中查看 SO answer no. 3 链接)这是更有效的方式还是这个?
  • @spt025:取决于你想要什么。如果您希望所有项目都使用 ASCII 字符(和 ASCII WinAPI 函数),除非另有说明 - 更改项目设置,否则 - 使用其中之一。
  • 好的,明白你的解释了。感谢您的宝贵时间。
猜你喜欢
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
相关资源
最近更新 更多