CString test;
char * buffer; // указатель на данные
strcpy(buffer, LPCSTR(test)); // копировать в него данные
Преобразование CString в char*
Код:
В строке копирование компилятор выдает ошибку:
.\MyClip.cpp(33) : error C2440: '<function-style-cast>' : cannot convert from 'CString' to 'LPCSTR'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Как конвертировать?
Код:
CString test = "The New String";
char *buffer = new char[200];
strcpy(buffer,test);
char *buffer = new char[200];
strcpy(buffer,test);
Очень странно.Так все должно работать.Только в твоем примере строки
test нет,она ни чему не равна и указатель...!!!:) А поводу конвертации
все должно быть нормально, а какая студия ?
m_Valery, не должно это работать, если CString юникодовая. А проект как раз видимо создан с настройками юникода.
Код:
strcpy(buffer, LPCTSTR(test));
Или вот еще:
Код:
#include <atlstr.h>
CString s = "Hallo";
char *buffer;
buffer = s.GetBuffer();
CString s = "Hallo";
char *buffer;
buffer = s.GetBuffer();
вот весь код функции
Код:
void CMyClip::CopyText(CString test)
{
if (AfxGetMainWnd()->OpenClipboard())// если буфер обмена удалось открыть то
{
if (EmptyClipboard()) // Очистить буфер
{
HGLOBAL clipbuffer;
char * buffer; // указатель на данные
clipbuffer = GlobalAlloc(GMEM_DDESHARE, test.GetLength()+1);// выделить память
buffer = (char*)GlobalLock(clipbuffer); // блокировать буфер
strcpy(buffer, LPCSTR(test)); // копировать в него данные
GlobalUnlock(clipbuffer); // разблокировать
SetClipboardData(CF_TEXT,clipbuffer); // установить данные и тип
if (!CloseClipboard()) AfxMessageBox("Error Close");// закрыть
} else AfxMessageBox(TEXT("Error Empty"));
} else AfxMessageBox(TEXT("Error Open"));
}
{
if (AfxGetMainWnd()->OpenClipboard())// если буфер обмена удалось открыть то
{
if (EmptyClipboard()) // Очистить буфер
{
HGLOBAL clipbuffer;
char * buffer; // указатель на данные
clipbuffer = GlobalAlloc(GMEM_DDESHARE, test.GetLength()+1);// выделить память
buffer = (char*)GlobalLock(clipbuffer); // блокировать буфер
strcpy(buffer, LPCSTR(test)); // копировать в него данные
GlobalUnlock(clipbuffer); // разблокировать
SetClipboardData(CF_TEXT,clipbuffer); // установить данные и тип
if (!CloseClipboard()) AfxMessageBox("Error Close");// закрыть
} else AfxMessageBox(TEXT("Error Empty"));
} else AfxMessageBox(TEXT("Error Open"));
}
видимо да, проект с поддержкой юникода, в firststeps по 6 версии написано, а в 2005 несколько другие названия проектов, а я мучаюсь, в функции передаю строки, используя макросы TEXT, LPCSTR.
а можно исправить проект, чтобы был без юникода, это в свойствах, настройка Character set?
2voinDi - да это там.
Спасибо, изменила настройки проекта и использовала функцию GetBuffer
возможно не оптимально, но работает.