Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
ВнизC++ 2 Delphi Найти похожие ветки
← →
dumb (2002-12-04 01:09) [0]Пожалуйста,
Помогите перевести кусок С++ в Delphi. Я избалован Delphi и незнаю кто тут кому сколько памяти должен. Спасбио.
...
CString strOutFile;
DoSomething(strOutFile.GetBuffer(255));
strOutFile.ReleaseBuffer();
...
← →
PVOzerski (2002-12-04 01:18) [1]И как такое переводить, не зная устройства С++-ного класса CString? :^(
а формально-то всё просто:
...
var
strOutFile:CString;
...
begin
...
DoSomething(strOutFile.GetBuffer(255));
strOutFile.ReleaseBuffer;
...
Только вот толку-то с такого перевода?
← →
wam (2002-12-04 01:21) [2]var
strOutFile: string;
procedureDoSomething(var str: string);
DoSomething(strOutFile);
strOutFile.GetBuffer(255) возвращает указатель на array of PCHAR
strOutFile.ReleaseBuffer() записывает из буфера в поле класса
← →
dumb (2002-12-04 01:28) [3]первое, что приходит в голову (и работает)
var strOutFile: string
..
DoSomething(strOutFile, i);
strOutFile := Copy(strOutFile, 1, SmartPos(#0, strOutFile) - 1);
но можно ли красивее?
← →
dumb (2002-12-04 01:30) [4]Ой.. извините, погнал.
var strOutFile: string
..
SetLength(OutFile, 255);
DoSomething(strOutFile, i);
strOutFile := Copy(strOutFile, 1, Pos(#0, strOutFile) - 1);
← →
wam (2002-12-04 01:30) [5]Поправка
strOutFile.GetBuffer(255) возвращает указатель на array of CHAR, заполняя его из поля класса, а 255 - максимальный размер буфера.
В С функция работает с буфером как с массивом символов.
При вызове из Delphi 3 и выше будет преобразование в этот массив.
Если неизвестен механизм функции, надежнее преобразовать string в array of CHAR признак конца строки - chr(0).
strOutFile.ReleaseBuffer() записывает из буфера в поле класса
← →
dumb (2002-12-04 01:32) [6]да блин... что же со мной! вот нормальный код для размышления без всякого мусора:
var strOutFile: string
..
SetLength(strOutFile, 255);
DoSomething(strOutFile);
strOutFile := Copy(strOutFile, 1, Pos(#0, strOutFile) - 1);
← →
wam (2002-12-04 01:34) [7]StrCopy & StrPCopy
← →
dumb (2002-12-04 01:39) [8]скорее всего, наоборот
← →
Fantasist (2002-12-04 07:02) [9]
> strOutFile.GetBuffer(255) возвращает указатель на array
> of CHAR, заполняя его из поля класса
Тут не столь важно, как это устроенно внутри. Копирование происходит не всегда, но главное - возвращается указатель на внутренний буффер.
> а 255 - максимальный размер буфера.
Минимальный.
> strOutFile := Copy(strOutFile, 1, Pos(#0, strOutFile) -
> 1);
А это зачем? Копируем себя в самого себя? Если зарание размер не известен, но точно известно, что DoSomething поставит 0 в конце строки, то можно так:
var
strOutFile: string;
p:^Cardinal;
..
SetLength(strOutFile, 255);
DoSomething(pointer(strOutFile));
p:=Pointer(Integer(strOutFile)-4);
p^:=Pos(#0,strOutFile)-1;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c