Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.033 c
4-1124699793
ArtemESC
2005-08-22 12:36
2005.12.04
Плавно зарисовать Desktop


2-1132080872
Kirill_
2005-11-15 21:54
2005.12.04
Неравенства


1-1131171710
Seg
2005-11-05 09:21
2005.12.04
Отмена перехода на с закладки на закладку в PageControl


2-1132227371
ramzes13
2005-11-17 14:36
2005.12.04
Как заменить Enter в ListBoxe


3-1129929995
AlexLines
2005-10-22 01:26
2005.12.04
Как можно найти с помощью SQL запроса слово в ковычках





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский