Форум: "Основная";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизОшибка при обращении со строками Найти похожие ветки
← →
capkoh © (2006-01-04 20:11) [0]Написал код вставки текста из буфера обмена. В этом коде на последней строке происходит ошибка. Это связано с тем что что-то не в порядке с обрашением с памятью и\или обращением со строками.
Если использовать код для малых кусков текста, то все в порядке. Однако, при больших текстах что-то в WideCharToMultiByte ломается. Никак не пойму что. У кого-нибудь есть идеи как проконтролировать длину строки? И какая она максимальная? На сколько я знаю - 4ГБ...
procedure TSomeEdit.GetBuffer(Format: word; var Buffer : PWideString);
var
temp : WideString;
Data: THandle;
begin
OpenClipboard(Handle);
Data := GetClipboardData(Format);
try
if Data <> 0 then
begin
temp := PWideChar(GlobalLock(Data));
Buffer := PWideString(temp);
end
else
Buffer := 0;
finally
if Data <> 0 then GlobalUnlock(Data);
CloseClipboard;
end;
end;
Вызов:
ws : TWideString;
GetBuffer(CF_UNICODETEXT, PWideString(ws));
n := WideCharToMultiByte(CodePage, 0, PWideChar(ws), -1, 0, 0, 0, 0);
← →
Гаврила © (2006-01-05 00:31) [1]
>temp := PWideChar(GlobalLock(Data));
> Buffer := PWideString(temp);
temp - локальная переменная, которая будет автоматически освобождена компилятором при выходе из
процедуры GetBuffer().
соответственно, в переменной
var Buffer : PWideString
ты запоминаешь ссылку на ужзе освобожденный участок памяти
← →
capkoh © (2006-01-05 16:30) [2]Спасибо, починил!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.016 c