2009-04-24 1 views

ответ

3

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

+3

Тип LPTSTR, strcpy не будет работать, если определен UNICODE, _UNICODE. – dirkgently

7

Вы используете CString :: GetBuffer(), чтобы получить TCHAR [] - указатель на буфер. Если вы скомпилировали без UNICODE, это будет достаточно - TCHAR будет таким же, как char, иначе вам придется выделять отдельный буфер и использовать WideCharToMultiByte() для преобразования.

1

Вызов только метода GetBuffer недостаточно, вам также потребуется скопировать этот буфер в массив.

Например:

CString sPath(_T("C:\temp\")); 
TCHAR tcPath[MAX_PATH]; 
_tcscpy(szDisplayName, sPath.GetBuffer(MAX_PATH)); 
4

я боролся с этим, но то, что я использую сейчас это: (UNICODE дружеский)

CString strCommand ("Мой текст для отправки в DLL.");

**

char strPass[256]; 
strcpy_s(strPass, CStringA(strCommand).GetString()); 

**

// CStringA версия характера не широкоформатный/юникода из CString Это будет положить нуль массива символов в strPass для вас.

Кроме того, если вы управляете DLL на другой стороне, указав ваши параметры как:

сопзЬ полукокса * strParameter

, а не

голец strParameter *

будет «вероятно» конвертировать CStrings для вас, когда кастинг по умолчанию обычно эффективен.