связывание Dll

  • Автор темы berserker
  • Дата начала
B

berserker

Гость
#1
Разрабатываю программу на DELPHI:суть в следующем есть exeшник и штук 10 dll,из еxe файла получаю необходимые данные пересылаю их в одну из dll(она отвечает за все вычисления),она пересылает во все остальные,они что-то делают и отправляют результат обратно.Прогрмма уже написана(с применением ООП) и работает,но пока только вместо dll - раs.

вопрос1: как проще можно организовать предачу данных между dll и взаимодействие с внутренними классами этих dll,если подразумевается что в дальнейшем могут добавляться dll написанные на других языках?

вопрос2: на данном этапе я выбрал в качестве такого инструмента TStream.КАК ИСПОЛЬЗОВАТЬ его МЕТОД Writebuffer?DElphi выдает мне постоянно EAbort на следующее выражение:
obj_stream:=tstream.Create;
obj_stream.writebuffer(a,sizeof(a));
 
E

etc

Гость
#2
Это как, простите?
По всем правилам, а как может быть иначе ....
что в дальнейшем могут добавляться dll написанные на других языках
А вот тут надо подробнее.
КАК ИСПОЛЬЗОВАТЬ его МЕТОД Writebuffer?
Что говорит справка?


Кстати, а при чем тут СОМ ?
 
Z

zubr

Гость
#3
Передавай указатели на структуры - указатель он и в африке указатель. Естественно размер структур и их структура должны быть индентичны.
 
B

berserker

Гость
#4
Отвечаю:"вместо dll pas" означает,что у меня уже написан код и я его хочу вставить в dll
Справка не говорит ничего нового,Delphi почему -то глючит именно на команде WriteBuffer,говорит что Tstream не содержит этого метода,но компилирет и выдает потом EAbort. ReadBuffer - все ОК

А СOM здесь притом,что часть библиотек( сделанных в Matlab) связана с exe через COM и я хочу сделать тоже самое с другими
 
Z

zubr

Гость
#5
TStream - это абстрактный класс, поэтому напрямую его использовать нельзя. Используй потомков этого класса, к примеру TMemoryStream.
 
S

SNike

Гость
#6
Если хочешь сделать связку через COM - почитай про интерфейсы и т.д.
Если просто DLL - то нужно помнить что у самой программы (Exe) и DLL разные зоны видимости данных, и потому передать в DLL, например, объект, просто так не получится. Так же как и передавать тип String без использования менеждера памяти.