Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
1-1085715061
russko
2004-05-28 07:31
2004.06.06
Векторный графический редактор


1-1085643388
Fifa
2004-05-27 11:36
2004.06.06
модуль objects.pas


6-1082103558
Иксик
2004-04-16 12:19
2004.06.06
Html парсер


4-1082639648
Talla2k
2004-04-22 17:14
2004.06.06
Проблемы с потоком


14-1084981103
Piter
2004-05-19 19:38
2004.06.06
Преобразование числа в рубли и копейки




   Наверх