function MyDecode (Source: PChar; SourceLen: Integer; var Dest: PChar; DestLen: Integer): Boolean; stdcall;
HostApp调用"MyDecode",并传入Source、SourceLen和Dest参数,DLL返回解码后的Dest和DestLen。问题在于:HostApp无法知道解码后的Dest长度,因此不知道如何预先分配Dest的内存。
我知道可以将"MyDecode"拆分为两个函数:
function GetDecodeLen (Source: PChar; SourceLen: Integer): Integer; stdcall; // Return the Dest's length
function MyDecodeLen (Source: PChar; SourceLen: Integer; var Dest: PChar): Boolean; stdcall;
但是,我的解码过程非常复杂,如果拆分成两个函数会影响效率。
有更好的解决方案吗?
是的,亚历山大,这可能是一个不错的解决方案。 HostApp 代码:
//...
MyDecode(....)
try
// Use or copy Dest data
finally
FreeDecodeResult(...)
end;
DLL代码:
function MyDecode(...): Boolean;
begin
// time-consuming calculate
// Allocate memory
GetMem(Dest, Size);
// or New()?
// or HeapAlloc()?
end;
procedure FreeDecodeResult(Dest: PChar);
begin
FreeMem(Dest);
// or Dispose(Dest); ?
// or HeapFree(Dest); ?
end;
也许我应该将Dest的类型更改为指针。
哪种分配内存方法更好?GetMem/New还是HeapAlloc?