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;
インターフェースの循環参照を使用するときに潜在的なメモリリークの問題を認識して(すなわち、共有インターフェイスを指す実装クラスである) - この場合には、Delphiはガベージコレクタまたは「弱いポインタをゼロ」機能を欠いています。 http://blog.synopse.info/post/2011/12/08/Avoiding-Garbage-Collector%3A-Delphi-and-Apple-on-the-same-side –
を参照してください。循環参照は参照カウントによくある問題です。汚れたトリック 'Pointer(IntRef):= nil'は、refcountを変更せずにnullリファレンスを使用すると助けになります。 – kludg