Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
1-36117
qwertXX
2002-12-03 10:53
2002.12.12
переход с Delphi5 на Delphi6


14-36366
iNew
2002-11-21 06:33
2002.12.12
Говорят, что для обучения программированию лучше подходят


14-36337
Ketmar
2002-11-16 19:15
2002.12.12
господа lj-шники, а кто меня поможет туда попасть?


1-36197
TUZ_SS
2002-12-04 10:42
2002.12.12
Разница в днях


1-36279
Melnyk
2002-12-02 14:50
2002.12.12
Вопрос по GroupProject





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский