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

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

0 голосов
/ 20 марта 2012

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

Ответы [ 3 ]

3 голосов
/ 20 марта 2012

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

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

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

1 голос
/ 20 марта 2012

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

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

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

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

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

0 голосов
/ 21 февраля 2019
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); 
    }
 }

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

...