如何将const wchar_t类型转换为LPTSTR(C++)



我正在尝试修改一个旧插件以创建一个新插件(在C++和Visual Studio 2019中(。当我编译时,我得到以下错误标记为红色的TEXT。

E0144:类型为";const wchar_t*";无法用于初始化LPTSTR 类型的实体

LPTSTR process_name = TEXT("rFactor2.exe");
module_address = GetModuleBase(process_name, pID);

我调查了一下,看到了一个类似的帖子,建议这样做:

LPTSTR process_name = foo(TEXT("rFactor2.exe"));

现在我得到以下错误:

E0020:标识符"foo";未定义

有人能告诉我如何以LPTSTR格式创建变量(这是GetModuleBase所期望的类型(吗?

LPTSTR定义为TCHAR*。你想要的是一个常量指针。您可以使用LPCTSTR,它被定义为TCHAR const*:

LPCTSTR process_name = TEXT("rFactor2.exe");

如果您的函数需要一个非常量指针,您可以创建一个副本:

TCHAR process_name[] = TEXT("rFactor2.exe");

请注意,字符串文字和数组的生存时间不相同。


这是GetModuleBase期望的类型

考虑到您使用的是遗留代码,您的函数可能采用非常量指针而不修改它们。如果您确信这一点,并且无法继续将这些函数签名修复为常量正确,则可以使用类型转换。这只能作为最后的手段:

auto process_name = const_cast<LPTSTR>(TEXT("rFactor2.exe"));

推荐读数:

  • C++不赞成从字符串常量转换为"char*">
  • 向我推销const正确性
  • TCHAR仍然相关吗

tstr最不需要的就是windowsmillennium。真的你不需要它的东西

最新更新