Главная страница
    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.039 c
1-36084
Barmutik
2002-11-29 11:45
2002.12.12
Перенос элементов в TreeView на одном уровне...


14-36361
Шишкин Илья
2002-11-20 20:34
2002.12.12
А как сделать так, чтобы мой IP не было видно в форуме?


1-36182
Денис
2002-12-03 17:17
2002.12.12
действия с натуральными числами


1-36258
Макса
2002-12-02 11:37
2002.12.12
Как закрыть Com-сервер?


1-36202
TAN_1
2002-12-03 16:22
2002.12.12
Как зашифровать строку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский