ОБСУЖДЕНИЕ

связывание Dll

5 ответов 6,7 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
Разрабатываю программу на 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));
 
Это как, простите?
предачу данных между dll
По всем правилам, а как может быть иначе ....
что в дальнейшем могут добавляться dll написанные на других языках
А вот тут надо подробнее.
КАК ИСПОЛЬЗОВАТЬ его МЕТОД Writebuffer?
Что говорит справка?


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

А СOM здесь притом,что часть библиотек( сделанных в Matlab) связана с exe через COM и я хочу сделать тоже самое с другими
 
TStream - это абстрактный класс, поэтому напрямую его использовать нельзя. Используй потомков этого класса, к примеру TMemoryStream.
 
Если хочешь сделать связку через COM - почитай про интерфейсы и т.д.
Если просто DLL - то нужно помнить что у самой программы (Exe) и DLL разные зоны видимости данных, и потому передать в DLL, например, объект, просто так не получится. Так же как и передавать тип String без использования менеждера памяти.