Главная страница
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.019 c
1-51304
kosm
2003-10-06 11:13
2003.10.16
Класс как параметр и перегрузка конструктора


6-51390
Не достаточно грамотный
2003-08-22 19:48
2003.10.16
Доступ к расшаренным ресурсам в WinXP и Win2k (платформа NT)?


4-51555
Rel_
2003-08-11 10:55
2003.10.16
возможности ScrollBar


9-51050
Knight
2003-04-14 22:22
2003.10.16
Тетрис - слабое звено...


14-51475
Anonim
2003-09-29 13:31
2003.10.16
Есть комментарии????