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

Вниз

Правильная передача в Dll структуры данных.   Найти похожие ветки 

 
IrBisoff ©   (2004-05-21 09:59) [0]

У меня есть небольшой трабл. Вот, решил разделить программу на модули и столкнулся с ним. =) У меня есть главная программа, которая обрабатывает всё и передаёт данные второй. Только вот вопрос возникает - как. Пока что делаю Ini, который считываю при загрузке модуля, а записываю при его запуске. Но мне не нравится. =) Может есть другие варианты ?

Структура примерно такая:

type RFirstSymbolFormat = record
 Select,  Bold,  Italic,  Underline : boolean;
 Font,  Color : string;
 Size,  Indent : integer;
end;

type RTextFormat = record
 Bold,  Italic,  Underline : boolean;
 Font,  Color : string;
 Size : integer;
end;

type RBooks = record
 BookPath,  BookName : string;
 HeightLineSpace,
 CurPage,  PagesCount : integer;
 SymbolsCount : LongInt;
 FirstSymbol : RFirstSymbolFormat;
 TotalText : RTextFormat;
end;

type RBooksetz = record
 ReaderThemeName,
 ReaderThemePath : string;
end;

type RWindowPos = record
 Left, Top, Width, Height : integer;
end;

var
 FileForView : string;
 BooksMas : array[1..65535] of RBooks;
 NRBook : integer;
 BookSetz : RBooksetz;
 MainWindowNormalPos : RWindowPos;


 
Гаврила ©   (2004-05-21 10:03) [1]

Можно передавать структуры (записи) как параметры в DLL, но если в записях присутствуют длинные строки, нужно использовать ShareMem.
Или компилировать с пакетами. Или использовать короткие строки


 
ega23 ©   (2004-05-21 10:04) [2]

использовать ShareMem.
Или компилировать с пакетами. Или использовать короткие строки

Или PChar использовать.


 
PVOzerski ©   (2004-05-21 10:04) [3]

В сущности, есть 4 разумных варианта: командная строка (но это - без "обратной связи", разве что обрабатывать код выхода), пайпы, сообщения, OLE/COM. С файлами - в принципе, оправдано только в редких случаях. С ini-файлами - IMHO плохо в принципе.


 
PVOzerski ©   (2004-05-21 10:08) [4]

Сорри, это я, конечно, имел в виду вызов одного exe из другого, т.е. взаимодействия между приложениями. В случае DLL мои первые 2 варианта просто "не прокатывают", но добавляется самый очевидный и эффективный путь: общение через функции, объявленные в DLL как экспортируемые. С учетом сказанного в [1] и [2].


 
IrBisoff ©   (2004-05-22 10:07) [5]

Я, наверное, тормоз... Как вызвать в-ию из dll с параметром ? Такое вот:

var
 NameD: procedure (NRBook : integer);
 lib : THandle;
begin
 lib := LoadLibrary(PChar(Plugins.Strings[0]));
 NameD := GetProcAddress(lib, "DoMain");
 if @NameD <> nil then NameD(1);
 FreeLibrary(lib);
end;


вызывает exception. =(

Dll:

procedure DoMain(NRBook : integer);stdcall;
begin
{...}
end;

 exports DoMain;


 
Verg ©   (2004-05-22 12:55) [6]


> var
>  NameD: procedure (NRBook : integer); stdcall;


Попробуй так


 
IrBisoff ©   (2004-05-22 13:25) [7]


> > var
> >  NameD: procedure (NRBook : integer); stdcall;


Спасибо. Я тормоз. =))))



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
4-1082641249
kalishenko
2004-04-22 17:40
2004.06.06
Количество файлов в папке


4-1082703033
Александр_33
2004-04-23 10:50
2004.06.06
Текст в окне DOS-приложения


14-1084755803
ИМХО
2004-05-17 05:03
2004.06.06
Кодеки для MPG


1-1085408550
$Hic0
2004-05-24 18:22
2004.06.06
Events


1-1085553493
Krys
2004-05-26 10:38
2004.06.06
Excel.Application