Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c