Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1082110707
Геннадий
2004-04-16 14:18
2004.06.06
Таблица маршрутизации


14-1084876296
Карелин Артем
2004-05-18 14:31
2004.06.06
А есть ли аналог КЛАДРА на Украине.


3-1084636377
VVV
2004-05-15 19:52
2004.06.06
исходный текст (Дублирование)


14-1085050729
Том
2004-05-20 14:58
2004.06.06
Как решить задачу !


14-1084564681
Piter
2004-05-14 23:58
2004.06.06
Ни у кого нету заготовок СЧЕТОВ-ФАКТУР?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский