Передача объекта в DLL является грязной (fr agile, не рекомендуется). Настолько, что я отказался от этого какое-то время go. Теперь, если я хочу передать объект в DLL, я делаю это через интерфейс.
Если вы намерены придерживаться этого пути, есть несколько вещей, которые вам нужно знать.
Во-первых, скорее всего (определенно?) Не будет работать для другой версии Delphi.
Может не работать, если вы не собрали EXE и DLL с точной те же параметры компиляции.
Это может все еще не работать, если вы скомпилировали с точно такими же параметрами компиляции.
Если вы не соберете как EXE, так и DLL с помощью пакета времени выполнения, могут произойти странные вещи, как
function Sample(AStrings : TStringList) : Boolean;
var vStrings : TStringList;
begin
vStrings := TStringList.Create;
try
AStrings.Assign(vStrings); //ERROR : Cannot assign a TStringList to a TStringList
finally
vStrings.Free;
end;
end;
Это происходит потому, что DLL и EXE не имеют одинаковые ссылки на класс. У них обоих есть собственное определение TStringList, и они несовместимы.
Так что, в зависимости от того, что делает ваша функция, вам, вероятно, понадобится TBitmap32 в пакете времени выполнения. И в зависимости от того, что делает TBitmap32, вам также понадобится пакет времени исполнения с каждым классом, который он использует, прямо или косвенно.
Возможно, есть еще кое-что ... Я перестал исследовать это минное поле длиной go.