delphi – 使用dll接口是否安全
发布时间:2020-12-15 09:22:51 所属栏目:大数据 来源:网络整理
导读:当我想在DLL中导出类时,从接口派生它并通过导出函数返回该接口是否正确? //exported dll function,which is used in the exe.function MyClass_Create: IMyClass;begin result := TMyClass.Create;end; 内存管理怎么样?我可以传入/传出不同的接口和字符串
当我想在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相比,它非常笨重. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |