Is it possible (without the use of Runtime Packages or the Shared Memory DLL) to pass a Record type between the host application and a DLL module where the Record type contains Functions/Procedures (Delphi 2006 and above)?
Let's presume for the sake of simplicty that our Record type doesn't contain any String fields (as this of course requires the Sharemem DLL), and here's an example:
TMyRecord = record
Field1: Integer;
Field2: Double;
function DoSomething(AValue1: Integer; AValue2: Double): Boolean;
end;
So, to state this simply: can I pass an "instance" of TMyRecord between the host application and a DLL (in either direction), without the use of Runtime Packages or Shared Memory DLL, and execute the DoSomething function from both the Host EXE and the DLL?
I would not suggest that, whether it works or not. If you need the DLL to operate on TMyRecord
instances, the safest option is to have the DLL export plain functions instead, eg:
DLL:
type
TMyRecord = record
Field1: Integer;
Field2: Double;
end;
function DoSomething(var ARec: TMyRecord; AValue1: Integer; AValue2: Double): Boolean; stdcall;
begin
...
end;
exports
DoSomething;
end.
App:
type
TMyRecord = record
Field1: Integer;
Field2: Double;
end;
function DoSomething(var ARec: TMyRecord; AValue1: Integer; AValue2: Double): Boolean; stdcall; external 'My.dll';
procedure DoSomethingInDll;
var
Rec: TMyRecord;
//...
begin
//...
if DoSomething(Rec, 123, 123.45) then
begin
//...
end else
begin
//...
end;
//...
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With