微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 使用dll接口是否安全

当我想在DLL中导出类时,从接口派生它并通过导出函数返回该接口是否正确?

//exported dll function,which is used in the exe.
function MyClass_Create: IMyClass;
begin
  result := TMyClass.Create;
end;

内存管理怎么样?我可以传入/传出不同的接口和字符串而不用担心和崩溃吗?

IMyClass = interface
  procedure SetString(aMsg: string);
  function GetString: string;

  procedure SetClass(aClass: ITestClass);
  function GetClass: ITestClass;
end;

解决方法

使用这样的接口将确保实现接口的对象将在同一堆上创建和释放.

但是,这不能解决在不同堆上分配和释放动态字符串类型的问题.有很多可能的解决方案,但在我看来,最好的方法是在模块边界使用WideString.

WideString类型是COM BSTR的包装器,并在共享COM堆上分配.您只需要使用WideString作为接口.实现类的内部可以使用本机Delphi字符串.

就像字符串存在问题一样,动态数组也是如此尝试跨模块边界传递动态数组并不安全.没有解决方案和WideString一样方便.你可以使用变量数组,但与WideString相比,它非常笨重.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐