C ++ LPCTSTR到char *

时间:2012-03-20 06:11:36

标签: c++ mfc char converter lpcstr

我正在使用visual studio 2010 MFC来构建C ++程序。我的程序调用一个不属于项目的DLL,它接受一个char *。我有一个函数获取LPCTSTR格式的字符串。我现在已经在谷歌上大约两个小时,并没有找到解决方案。如何将MFC LPCTSTR转换为char *。我发现的所有东西要么不起作用,要么就是不能编译。

3 个答案:

答案 0 :(得分:3)

在MFC中,最简单的方法是转换CStringA(前提是生成的缓冲区将是只读参数):

LPCTSTR pszA = ...
CStringA sB(pszA);
const char* pszC = sB;
char* pszD = const_cast<char*>(pszC);

其他选项可供使用并进行了讨论:

答案 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); 
    }
 }

这是我用来类型转换变量的方式

相关问题