我是否正确地从 "const char *" 转换为 "TCHAR*"?

Am I converting properly from "const char *" to "TCHAR*"?

我正在尝试将进程名称作为 TCHAR 传递给以下空值:

void GetBaseAddressByName(DWORD pID, TCHAR *pN)    

通过这样做:

GetBaseAddressByName(aProcs[i], (TCHAR*)"Process.exe");

所以我的问题是:我做的对吗?因为我在 Multi-Bite 和 Unicode 上都尝试了 TEXT("Process.exe") 和 _T("Process.exe") 以及我项目的字符集,它只是告诉我

argument of type "const char*" is incompatible with parameter of type "TCHAR*"

最好先有一个TCHAR数组,再copy进去

#include "atlstr.h"
char const *  procName = "processName.exe";
TCHAR szName [128];
_tcscpy(szName, A2T(procName));
GetBaseAddressByName(aProcs[i], szName);

正如@Remy Lebeau 在评论中所建议的那样,procName 可以定义为 TCHAR const * procName = TEXT("processName.exe");

你需要一个L,比如L"Process.exe"。 Unicode 字符串用 L"".

指定

也就是说,没有理由使用 TCHAR。如果只做 Windows 工作,请始终使用 unicode。

简短的回答是否定的。 TCHAR 映射到 charwchar_t,具体取决于项目的 Unicode/Multi-byte 设置。所以,一般来说,这样的演员表要么是不必要的,要么是不正确的。正如您所说,正确的方法是使用 TEXT_T 宏。您收到错误的原因是您试图将 const 字符串传递给需要可变字符串的函数。绕过错误的安全设置方法是将常量字符串复制到本地 TCHAR 缓冲区,然后将其传递给 GetBaseAddressByName.

(TCHAR*)"Process.exe" 不是有效的类型转换。当项目字符集设置为 ANSI/MBCS 时,它将 "work",但如果字符集设置为 Unicode,它将产生垃圾。

使用 TEXT("Process.exe") 是使字符串文字使用 TCHAR 个字符的正确方法。

GetBaseAddressByName(aProcs[i], TEXT("Process.exe"));

但是,您需要将 pN 参数改为 const TCHAR *(或 LPCTSTR):

void GetBaseAddressByName(DWORD pID, const TCHAR *pN);

void GetBaseAddressByName(DWORD pID, LPCTSTR pN);

字符串文字是 const 数据,您不能在需要指向非 const 数据的指针的地方传递指向 const 数据的指针(不使用 [= 强制转换 const 20=]).这就是为什么您在尝试使用 TEXT()/_T() 宏时仍然遇到错误的原因。