1

我正在尝试修改旧插件以创建新插件(在​​ 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预期的类型)吗?

4

2 回答 2

1

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

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

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

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

请注意,字符串文字和数组的生命周期并不相同。


这是GetModuleBase期望的类型

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

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

推荐阅读:

于 2021-01-09T11:19:49.710 回答
0

tstr 需要的最后一件事是 windows 千年。真的你不需要它的东西

于 2021-01-09T13:29:09.400 回答