C ++ LPCTSTR到char *

问题描述 投票:0回答:3

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

c++ mfc char converter lpcstr
3个回答
3
投票

在MFC中最简单的方法是通过CStringA进行转换(假设生成的缓冲区是只读参数):

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

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


1
投票

根据您的项目是否定义了预处理器符号LPCTSTR(或const wchar_t *,我忘记MFC使用哪一个),const char *被定义为UNICODE_UNICODE

因此,您的问题的解决方案取决于您是否使用UNICODE设置。

如果您正在使用它,则需要将字符串转换为窄字符串。使用CStringA来做到这一点。

如果您不使用UNICODE,则需要制作一个可变的副本并将其传递给DLL,以防它想要修改字符串。您可以使用CString创建副本来完成此操作。

在任何一种情况下,一旦你在CString对象中有一个副本,然后使用GetBuffer方法获得一个指向字符串的可变指针,调用DLL函数,然后在调用后调用ReleaseBuffer


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

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

© www.soinside.com 2019 - 2024. All rights reserved.