我正在使用visual studio 2010 MFC来构建C ++程序。我的程序调用一个不属于项目的DLL,它接受一个char *。我有一个函数获取LPCTSTR格式的字符串。我现在已经在谷歌上大约两个小时,并没有找到解决方案。如何将MFC LPCTSTR转换为char *。我发现的所有东西要么不起作用,要么就是不能编译。
答案 0 :(得分:3)
在MFC中,最简单的方法是转换CStringA
(前提是生成的缓冲区将是只读参数):
LPCTSTR pszA = ...
CStringA sB(pszA);
const char* pszC = sB;
char* pszD = const_cast<char*>(pszC);
其他选项可供使用并进行了讨论:
WideCharToMultiByte
,T2A
宏等。答案 1 :(得分:1)
LPCTSTR
被定义为const wchar_t *
或const char *
,具体取决于您的项目是否定义了预处理器符号UNICODE
(或_UNICODE
,我忘记了一个MFC使用)。
因此,问题的解决方案取决于您是否使用UNICODE设置。
如果您正在使用它,则需要将字符串转换为 narrow 字符串。使用CStringA
执行此操作。
如果您不使用UNICODE,则需要制作一个可变的副本并将其传递给DLL,以防它想要修改字符串。您可以使用CString
创建副本来完成此操作。
在任何一种情况下,一旦在CString
对象中有副本,然后使用GetBuffer
方法获取指向字符串的可变指针,调用DLL函数然后调用ReleaseBuffer
电话结束后。
答案 2 :(得分:0)
LPCTSTR patientName= L"";
CStringA sB(patientName);
const char* pszC = sB;
DcmFileFormat fileformat;
//Type casting below to const char * str
OFCondition status = fileformat.loadFile(((LPCSTR)(CStringA)str));
if (status.good())
{
if (fileformat.getDataset()->findAndGetString(DCM_PatientName, pszC).good())
{
//Type casting from const char * to LPCTSTR
m_List.InsertColumn(4, LPCTSTR(pszC) , LVCFMT_LEFT, 100);
}
}
这是我用来类型转换变量的方式