Главная страница
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.054 c
3-1084537217
Дмитрий
2004-05-14 16:20
2004.06.06
Отчеты в базах данных


3-1084544113
kalliopiy
2004-05-14 18:15
2004.06.06
Про BLOB ы


4-1083651174
Ske4er
2004-05-04 10:12
2004.06.06
Классический вопрос


6-1082026046
ZeBriD
2004-04-15 14:47
2004.06.06
Виснет прога при пересылке файла.


1-1085694297
Gestapo
2004-05-28 01:44
2004.06.06
Как вставить метафайл из буфера обмена в TImage?