Главная страница
    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.234 c
14-1131654391
mmms
2005-11-10 23:26
2005.12.04
Как писать проект в команде, если ты начальник :/


2-1132313011
Делфёст
2005-11-18 14:23
2005.12.04
работа с датами.


8-1120716723
serko
2005-07-07 10:12
2005.12.04
Вопросики по MediaPlayer!


2-1132231417
md
2005-11-17 15:43
2005.12.04
узнать разницу между числами


14-1131956381
Skier
2005-11-14 11:19
2005.12.04
WAVE-recorder





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