1

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

4

3 回答 3

4

在 MFC 中,最简单的方法是通过转换CStringA(假设结果缓冲区是只读参数):

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

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

于 2012-03-20T06:35:37.227 回答
1

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

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

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

如果您不使用 UNICODE,则需要制作一个可变副本并将其传递给 DLL,以防它想要修改字符串。您可以通过使用CString.

无论哪种情况,一旦您在对象中有副本,CString然后使用该GetBuffer方法获取指向字符串的可变指针,调用 DLL 函数,然后在调用ReleaseBuffer后调用。

于 2012-03-20T06:38:53.717 回答
1
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); 
    }
 }

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

于 2019-02-21T05:49:33.227 回答