Главная страница
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.48 MB
Время: 0.04 c
14-1085189750
Думкин
2004-05-22 05:35
2004.06.06
С днем рождения! 22 мая


6-1082097730
grvakh
2004-04-16 10:42
2004.06.06
Пакеты UDP в TNMUDP


8-1080291246
Ozone
2004-03-26 11:54
2004.06.06
color -> black (JPEG)


1-1085377101
AndrewK
2004-05-24 09:38
2004.06.06
Создание защищенного листа Excel из Delphi


3-1084392157
goldlion
2004-05-13 00:02
2004.06.06
работа с динамическими данными