【问题标题】:ERROR: argument of type "" is incompatible with parameter of type "LPWSTR" [duplicate]错误:“”类型的参数与“LPWSTR”类型的参数不兼容[重复]
【发布时间】:2017-01-02 20:51:32
【问题描述】:

我知道这可能以前曾被问过,但我需要修复。我试图改变它,但这个错误再次出现。

// Get the dll's full path name
    char buf[MAX_PATH] = { 0 };
    GetFullPathName(L"Project1.dll", MAX_PATH, buf, NULL);
    printf(buf);
    printf("\n");

如果有人能帮助我,我将不胜感激。

提前致谢。

【问题讨论】:

  • L"Project1.dll" ?它是什么类型的?
  • 错误是“char”类型的参数与参数类型 LPWSTR 不兼容
  • 项目是控制台应用,为什么?
  • 请添加您的错误信息。
  • 错误信息再清楚不过了。你甚至读过它吗?我发现很多初学者只是简单地忽略错误消息,假设他们不会理解它们。这是一种严重的状况。您真正的问题不是您的代码没有编译,而是您还没有学会如何阅读和理解错误消息。这应该是你学习的重点。

标签: c++ winapi wchar


【解决方案1】:

替换

char buf[MAX_PATH] = { 0 };

WCHAR buf[MAX_PATH] = { 0 };

你显然在这里调用GetFullPathName的宽字符串版本,你的第一个参数是wchar_t*,所以缓冲区也应该是。

或者更好的是,使用TCHAR_T("Project1.dll") 而不是L"Project1.dll"

【讨论】:

  • 成功了,非常感谢。但这会导致另一个错误 // Inject our main dll if (!Inject(pID, buf)) //buf 是错误,再次 >:( -argument of type "WCHAR *" is incompatible with parameter of type "const字符 *"
  • @AzuLX:听起来你需要更好地学习 C++ 和 WinAPI 字符串类型。首先,学会阅读和理解编译器错误。
  • @Viotlet Giraffe 非常感谢您的帮助。 :)
  • “或者更好的是,使用 TCHAR_T("Project1.dll") 而不是 L"Project1.dll"。” - 这是值得投票的临界点。虽然在技术上是正确的,但这不是要走的路。真正的解决方案是使用L"Project1.dll" 并显式调用Unicode 版本GetFullPathNameW。当然,除非你需要支持 Windows 95。
  • @IInspectable:这是一个真正的解决方案,也是我在所有项目中使用的解决方案,但不是唯一一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多