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

Вниз

Передача данных из 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.034 c
2-1132313797
Дева
2005-11-18 14:36
2005.12.04
SQL: о параметризированных запросах


14-1131628465
ASScef
2005-11-10 16:14
2005.12.04
Чем смотреть имена в DLL


2-1132059696
voe
2005-11-15 16:01
2005.12.04
Жизнидеятельность приложений


3-1129627040
torch
2005-10-18 13:17
2005.12.04
Есть ли в Delphi какие-нибудь средства для рабты с иерархическими


1-1131042442
Toxa_ua
2005-11-03 21:27
2005.12.04
Содержимое TEdit ???