C++ LPCTSTR на символ *

Я использую Visual Studio 2010 MFC для создания программы на C++. Моя программа вызывает DLL, которая не является частью проекта, и она принимает символ *. У меня есть функция, которая получает строку в формате LPCTSTR. Я был на Google около двух часов, и решение не найдено. Как преобразовать форму MFC LPCTSTR в символ *. Все, что я нашел, либо не работает, либо просто не компилируется.

2 ответа

Решение

В MFC проще всего конвертировать через CStringA (при условии, что результирующий буфер будет аргументом только для чтения):

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

Другие варианты доступны и были обсуждены:

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

Это был способ, которым я использовал, чтобы типизировать переменные

LPCTSTR либо определяется как const wchar_t * или const char * в зависимости от того, определил ли ваш проект символ препроцессора UNICODE (или же _UNICODE Я забыл, какой MFC использует).

Таким образом, решение вашей проблемы зависит от того, используете ли вы настройку UNICODE или нет.

Если вы используете его, вам нужно преобразовать строку в узкую строку. использование CStringA сделать это.

Если вы не используете UNICODE, вам нужно будет сделать изменяемую копию и передать ее в DLL, если она захочет изменить строку. Вы можете сделать это, создав копию с помощью CString,

В любом случае, если у вас есть копия в CString объект затем использовать GetBuffer метод, чтобы получить изменяемый указатель на строку, вызвать функцию DLL, а затем вызвать ReleaseBuffer после звонка.

Другие вопросы по тегам