C++ LPCTSTR to char*

C++ LPCTSTR to char*

本文关键字:char to LPCTSTR C++      更新时间:2023-10-16

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

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

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

其他选项可用,并已讨论:

  • c++从LPCTSTR转换为常量字符*
  • 如何从LPCTSTR转换为LPSTR
  • CCD_ 2、CCD_ 3宏等

LPCTSTR被定义为const wchar_t *const char *,这取决于您的项目是定义了预处理器符号UNICODE(还是_UNICODE,我忘了MFC使用哪一个)。

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

如果您正在使用它,则需要将字符串转换为字符串。使用CStringA执行此操作。

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

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

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

这是我用来对变量

进行类型转换的方式