Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.016 c
1-51279
Сергей Резников
2003-10-06 18:20
2003.10.16
Полный путь приложения по его хэндлу


6-51393
Dakis
2003-08-15 03:30
2003.10.16
SMTP server


14-51509
ИМХО
2003-09-26 23:55
2003.10.16
На сотовый!


3-51058
Брат
2003-09-26 18:08
2003.10.16
Проблема с InterBase


1-51220
Magisimus
2003-09-30 19:56
2003.10.16
Как проверить существует ли компонент, по handl у?




   Наверх