delphi – 在HostApp和DLL之间预分配内存
发布时间:2020-12-15 04:22:03 所属栏目:大数据 来源:网络整理
导读:我有一个提供解码功能的DLL,如下所示: function MyDecode (Source: PChar; SourceLen: Integer; var Dest: PChar; DestLen: Integer): Boolean; stdcall; HostApp调用“MyDecode”,并转移到Source,SourceLen和Dest参数,DLL返回解码的Dest和DestLen. 问题是
我有一个提供解码功能的DLL,如下所示:
function MyDecode (Source: PChar; SourceLen: Integer; var Dest: PChar; DestLen: Integer): Boolean; stdcall; HostApp调用“MyDecode”,并转移到Source,SourceLen和Dest参数,DLL返回解码的Dest和DestLen. 我知道可以将“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; 但是,我的解码过程非常复杂,因此如果分成两个功能会影响效率. 有更好的解决方案吗? 是亚历山大,这可能是一个很好的解决方案. //... 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的类型改为Pointer. 哪个是更好的分配内存方法? GetMem / New,还是HeapAlloc? 解决方法
您可以通过其他方式将“MyDecode”拆分为两个例程:
function MyDecode(Source: PChar; SourceLen: Integer; out Dest: PChar; out DestSize: Integer): Boolean; stdcall; procedure FreeDecodeResult(Dest: PChar); stdcall; 即 – 你在MyDecode中分配内存而不是要求调用者这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |