我正在使用 Visual Studio 2010 MFC 构建 C++ 程序。我的程序调用了一个不属于项目的 DLL,它接受一个 char*。我有一个函数可以获取 LPCTSTR 格式的字符串。我已经在谷歌上大约两个小时了,但没有找到解决方案。如何将 MFC LPCTSTR 转换为 char*。我发现的所有东西要么不起作用,要么就是无法编译。
问问题
15011 次
3 回答
4
在 MFC 中,最简单的方法是通过转换CStringA
(假设结果缓冲区是只读参数):
LPCTSTR pszA = ...
CStringA sB(pszA);
const char* pszC = sB;
char* pszD = const_cast<char*>(pszC);
其他选项可用并进行了讨论:
- c++ 从 LPCTSTR 转换为 const char *
- 如何从 LPCTSTR 转换为 LPSTR?
WideCharToMultiByte
,T2A
宏等
于 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 回答