Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизПравильная передача в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c