Как засунуть Designer в DLL?
Все знают про эту проблемку: с дизайнером ехешник больше в 2 раза.
Вот я и пытаюсь выделить дизайнер в DLL-ку.
Передать вроде удалось: в ехешнике делаю
var pBuffer: Pointer;
szBuffer: integer;
begin
Stream:= TMemoryStream.Create;
try
frReport.SaveToStream(Stream);
szBuffer:= Stream.Size;
GetMem(pBuffer, szBuffer);
Stream.Seek(0, soFromBeginning);
Stream.Read(pBuffer^, szBuffer);
DLLDesignReport(pBuffer, szBuffer);
finally
FreeMem(pBuffer);
Stream.Free;
end;
end;
в DLL-ке:
function DLLDesignReport(Buffer: Pointer; szBuf: Integer): integer;
var Stream: TMemoryStream;
begin
Stream:= TMemoryStream.Create;
try
Result:=0;
Stream.Write(Buffer^, szBuf); {1}
Stream.Seek(0, soFromBeginning);
with TFRReport.Create(nil) do
try
LoadFromStream(Stream);
ShowReport;
finally
Free;
end;
finally
Stream.Free;
end;
end;
Но при попытке возвратить буфер назад в ехешник
(function DLLDesignReport(var{!!!} Buffer: Pointer; szBuf: Integer): integer;) возникает ошибка чтения в {1}.
Как это сделать по-другому?
Вот я и пытаюсь выделить дизайнер в DLL-ку.
Передать вроде удалось: в ехешнике делаю
var pBuffer: Pointer;
szBuffer: integer;
begin
Stream:= TMemoryStream.Create;
try
frReport.SaveToStream(Stream);
szBuffer:= Stream.Size;
GetMem(pBuffer, szBuffer);
Stream.Seek(0, soFromBeginning);
Stream.Read(pBuffer^, szBuffer);
DLLDesignReport(pBuffer, szBuffer);
finally
FreeMem(pBuffer);
Stream.Free;
end;
end;
в DLL-ке:
function DLLDesignReport(Buffer: Pointer; szBuf: Integer): integer;
var Stream: TMemoryStream;
begin
Stream:= TMemoryStream.Create;
try
Result:=0;
Stream.Write(Buffer^, szBuf); {1}
Stream.Seek(0, soFromBeginning);
with TFRReport.Create(nil) do
try
LoadFromStream(Stream);
ShowReport;
finally
Free;
end;
finally
Stream.Free;
end;
end;
Но при попытке возвратить буфер назад в ехешник
(function DLLDesignReport(var{!!!} Buffer: Pointer; szBuf: Integer): integer;) возникает ошибка чтения в {1}.
Как это сделать по-другому?
Комментарии