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

Вниз

DLL и строки   Найти похожие ветки 

 
d.u.k.e   (2003-10-02 01:40) [0]

Мастера, подскажите как заставить DLL возвращать список строк переменного объема?


 
Ihor Osov'yak ©   (2003-10-02 01:58) [1]

Способов много есть.. Наиболее традиционный - вызывающая сторона формирует буффер, в процедуру передается указатель на этот буффер, его размер. Процедура помещает в буффер тело строк, следя за тем, чтобы не выйти за преледы буффера. Также используктся еще одна переменная, которая говорит о том, сколько байт занимает результат. Если буффер мал - то строки или усекаются, или вооще не передаются - это смотря какие ты соглашения сделаешь. А в "еще одной переменной" оказывается нужный размер буффера. Тогда делается еще раз вызов, с уже нужным буффером. Довольно часто при перврм вызове вообще передается буффер нулевого размера - это критерий для процедуры, что она пеердачу делать не должна, а должна только сообщить нужный размер буффера..

Примерно так:

procedure GetStrs(aBuf: pointer; aMaxSizeBuf: dword; var aNeedSize: dword);

юзаем:
var buff:pointer;
nb: dword;
...
GetStrs(nil, 0, nb); // запрашиваем размер
GetMem (buff, nb); // резервуем буфффер
GetStrs(buff, nb, nb); // получаем результат
... // здесь обрабатываем результат в буффере
FreeMem(buff); // освобождаем буффер

Зы - само собой, как строки будем разделять в буффере.. Тоже, можно по разному.. Как правило - символ(или символы разделители), хотя бы тот же CL, довольно часто используют #0, иногда в конце также ставят специальный символ..


 
d.u.k.e   (2003-10-05 01:29) [2]

Большое спасибо за ответ. А нельзя ли как нибуть попроще. Например TStringList как нить заюзать?


 
Palladin ©   (2003-10-05 01:52) [3]

можно и попроще

в dll

function GetStrings:string;
var
stringlist:TStringList;
begin
....
stringlist.Delimiter:=#8;
Result:=stringlist.DelimitedText;
end;

в приложении
var
stringsfromdll:tstringlist;
getstrings:function :string;
....
stringsfromdll.Delimiter:=#8;
stringsfromdll.DelimitedText:=GetStrings;

только sharemem не забудь указать везде или пользуйся pchar



Страницы: 1 вся ветка

Текущий архив: 2003.10.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
3-51089
Дмитрий К.
2003-09-26 09:49
2003.10.16
Работа с выделеными строками


14-51491
Думкин
2003-08-28 06:46
2003.10.16
Новосибирск


1-51332
Dude
2003-10-04 17:01
2003.10.16
mouse_event - не понял.


1-51186
Странный...
2003-10-04 19:17
2003.10.16
перетаскивание объектов


14-51527
Кен
2003-09-17 01:17
2003.10.16
Два глюка вэб-браузера Кто знает как от них избавиться ?