如何将 const wchar_t 类型转换为 LPTSTR (C++)
How to transform const wchar_t type to LPTSTR (C++)
我正在尝试修改一个旧插件以创建一个新插件(在 C++ 和 Visual Studio 2019 中)。编译时出现以下错误,将 TEXT 标记为红色。
E0144: A value of type "const wchar_t *" cannot be used to initialize an entity of type LPTSTR
LPTSTR process_name = TEXT("rFactor2.exe");
module_address = GetModuleBase(process_name, pID);
我调查并看到类似的 post 建议:
LPTSTR process_name = foo(TEXT("rFactor2.exe"));
现在我收到以下错误:
E0020: identifier "foo" is not defined
有人能告诉我如何创建 LPTSTR 格式的变量(这是 GetModuleBase
期望的类型)吗?
LPTSTR
定义为 TCHAR*
。你想要的是一个 const 指针。您可以使用 LPCTSTR
,定义为 TCHAR const*
:
LPCTSTR process_name = TEXT("rFactor2.exe");
如果您的函数需要一个非常量指针,您可以创建一个副本:
TCHAR process_name[] = TEXT("rFactor2.exe");
请注意,字符串文字和数组的生命周期不同。
it's the type that GetModuleBase
expects
考虑到您正在使用遗留代码,您的函数可能采用非常量指针并且不修改它们。如果您确定这一点并且不能继续将这些函数签名修复为 const-correct,则可以使用类型转换。仅作为最后的手段才这样做:
auto process_name = const_cast<LPTSTR>(TEXT("rFactor2.exe"));
推荐阅读:
- C++ deprecated conversion from string constant to 'char*'
- Sell me on const correctness
- Is TCHAR still relevant?
最后需要的是 windows 千年。真的你不需要它的东西
我正在尝试修改一个旧插件以创建一个新插件(在 C++ 和 Visual Studio 2019 中)。编译时出现以下错误,将 TEXT 标记为红色。
E0144: A value of type "const wchar_t *" cannot be used to initialize an entity of type LPTSTR
LPTSTR process_name = TEXT("rFactor2.exe");
module_address = GetModuleBase(process_name, pID);
我调查并看到类似的 post 建议:
LPTSTR process_name = foo(TEXT("rFactor2.exe"));
现在我收到以下错误:
E0020: identifier "foo" is not defined
有人能告诉我如何创建 LPTSTR 格式的变量(这是 GetModuleBase
期望的类型)吗?
LPTSTR
定义为 TCHAR*
。你想要的是一个 const 指针。您可以使用 LPCTSTR
,定义为 TCHAR const*
:
LPCTSTR process_name = TEXT("rFactor2.exe");
如果您的函数需要一个非常量指针,您可以创建一个副本:
TCHAR process_name[] = TEXT("rFactor2.exe");
请注意,字符串文字和数组的生命周期不同。
it's the type that
GetModuleBase
expects
考虑到您正在使用遗留代码,您的函数可能采用非常量指针并且不修改它们。如果您确定这一点并且不能继续将这些函数签名修复为 const-correct,则可以使用类型转换。仅作为最后的手段才这样做:
auto process_name = const_cast<LPTSTR>(TEXT("rFactor2.exe"));
推荐阅读:
- C++ deprecated conversion from string constant to 'char*'
- Sell me on const correctness
- Is TCHAR still relevant?
最后需要的是 windows 千年。真的你不需要它的东西