TMemoryStream потомок TStream, зачем использовать TStreamAdapter?
Дело в том, что TMemoryStream в Delphi и TMemoryStream в Builder'е — две разные вещи (хотя я надеялся, что одинаковые, но, по-видимому, ошибался). И даже в разных версиях Delphi — это разные вещи, их нельзя заменять. В разных языках программирования используются разные, не совместимые друг с другом библиотеки классов, и даже сами внутренние представления классов могут различаться. IStream же — универсальный (и даже кроссплатформенный) интерфейс, им можно пользоваться для взаимодействия. TStreamAdapter умеет делать IStream из любого потомка TStream, а пользоваться IStream можно напрямую, не делая из него TStream.
Конечно, не обязательно идти по этому пути. Другие варианты Вам также предложили.
hurtsy писал(а):
Извините моё непонимание, как связать понятия exe и dll с терминологией вызывающая, вызываемая?
Функция, находящаяся в EXE, вызывает функцию, находящуюся в DLL. Значит, в EXE — вызывающая, в DLL — вызываемая.
hurtsy писал(а):
А от менеджера памяти можно отказаться?
Вероятно, в Вашем случае можно не пользоваться общим менеджером памяти, а использовать стандартные (в DLL — свой, в EXE — свой). Но в более сложных случаях (например, если Вы хотите передавать параметры типа AnsiString) он обязателен.