Главная страница
    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.035 c
14-1131565515
бабба
2005-11-09 22:45
2005.12.04
Помогите с архитектурным решением


14-1131907633
asdqwer
2005-11-13 21:47
2005.12.04
Ограничение на размер текста в элементе hidden HTML


2-1132313797
Дева
2005-11-18 14:36
2005.12.04
SQL: о параметризированных запросах


2-1131812366
Daiwer
2005-11-12 19:19
2005.12.04
Pchar и забиение на блоки


2-1132475688
Alex77777
2005-11-20 11:34
2005.12.04
"Зациклить" форму





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский