Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.12;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-36012
ДСН
2002-11-24 09:11
2002.12.12
Совместное использование таблиц MS Access


1-36221
Batik
2002-11-30 19:18
2002.12.12
Реакция на клавишы....


4-36490
kuzmich
2002-10-20 16:45
2002.12.12
Меню


1-36154
LORD
2002-12-03 19:09
2002.12.12
Buffer + Tstream


7-36427
Димашевский Вик
2002-10-11 14:30
2002.12.12
Опредиление метки CD-ROM