我是否正确地从 "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 映射到 char
或 wchar_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()
宏时仍然遇到错误的原因。
我正在尝试将进程名称作为 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 映射到 char
或 wchar_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()
宏时仍然遇到错误的原因。