Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизПередача данных из DLL в главный процесс Найти похожие ветки
← →
DillerXX © (2005-11-16 23:53) [0]Подскажите, как передать список, который формируется в ДЛЛ в главный процесс? Я пробовал записывать в файл из ДЛЛ - видимо кривые руки, но запись в файл работала криво :) Подскажите как получить некий массив в главное процессе...
← →
Digitman © (2005-11-17 08:34) [1]
> получить некий массив
> как передать список
Странного ты желаешь - ДЛЛ возвращает список, а тот кто вызвал ДЛЛ в результате получает с какого-то перепугу не список, а массив)
Ты уж определись как-нибудь, о чем идет речь - о списке или о массиве)
Если и хост-приложение (именно хост-приложение, а не какой-то там "главный процесс" !) и ДЛЛ собраны в Делфи одной и той же версии, то можно сделать так:
1.
в DLL:
function GetList: TList;
begin
Result := TList.Create;
..
end;
в хост-приложении:
function GetList: TList; external "MyLib.dll";
var
List: TList;
..
List := GetList;
try
// работа с полученным списком
finally
List.Free;
end;
2. Оба проекта (И проект хост-приложения И проект DLL) собираются с установленной опцией Build With Run-Time Packages
← →
Leonid Troyanovsky © (2005-11-17 09:06) [2]
> DillerXX © (16.11.05 23:53)
> Подскажите как получить некий массив в главное процессе.
Приложение распределяет массив нужного размера и передает в
библиотеку его адрес и размер.
В случае, если библиотечная функция нуждается в увеличении
размера, то лучше передавать массив заведомо большего размера,
максимальный размер массива, а также его текущий размер.
{Это объявление одинаково в приложении и библиотеке}
type
TArrayX= array [0 .. MAXLONGINT div 8] of Longint;
PArrayX= ^TArrayX;
{Это процедура в библиотеке работает с массивом}
procedure Dosomething(var a: TArrayX; var size: Longint; const maxsize);
begin
{size <= maxsize}
..
end;
{Этот код работает в приложении}
var
p: PArrayX; // указатель на массив
..
GetMem(p, SizeOf(Longint)* MaxSize); // распределяем массив c запасом
..
DoSomething(p^, n, MaxSize); // передаем его для обработки в dll
{ n <= MaxSize }
..
FreeMem(p); // освобождаем массив
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c