Delphiを使用してDLL多重化されたファイルを作成するための提案
標準のDLLインターフェイスを使用してみてください。これは、パスされたパラメータータイプと関数のリターンタイプは、文字列(ansistring)など、これらのタイプのメンバーを含むダイナミック配列と複合タイプ(レコードなど)に固有のものではないことを意味しません。これらのタイプのメンバー。文字列型または動的配列タイプを使用し、発信者がDelphiプログラムではない場合、基本的にエラーを報告します。発信者がDelphiであるが、発信者またはCalleeがプロジェクトファイルの最初のコンセントユニットにない場合、エラーも発生する可能性があります。これはSharememではありません。
発信者がDelphiアプリケーションである場合、禁止型(String、Dynamic Array)のデータメンバーをパラメーターまたは戻り値として含めないオブジェクトを使用できる場合がありますが、可能な限り避ける必要があります。
発信者と呼び出された当事者が両方ともDelphiプログラムであり、文字列または動的配列をパラメーターとして使用する必要がある場合、2つのパーティ間のプロジェクトファイルの最初の包含ユニットはSharememでなければなりません。 (C ++ビルダープログラムは同じかもしれませんが、テストされていません。)
発信者がDelphiプログラムではない場合、文字列または動的配列を含む文字列、動的配列、化合物データ型、クラスインスタンスはパラメーターまたは戻り値として使用することはできません。
したがって、DLLの多重化範囲を改善し、可能なエラーを回避するために、標準のWin32 API標準パラメータータイプを使用する必要があります。動的配列は、ポインタータイプ(@Array [0])に変換され、配列の長さを追加します。
発信者と呼び出されたパーティーが両方ともDelphiプログラムであり、執筆の利便性のために上記の変換を実行したくない場合は、ランタイムパッケージの形式を使用することをお勧めします。ランタイムパッケージは、動的に割り当てられたデータの正しいリリースを保証できます。これにより、その拡張機能(.bpl)のため、ファイルがDelphi/C ++ビルダーに限定されていることを示しています(DLLとは異なります)。
第二に、同じ操作に複数のメソッドがある場合、Formatxxxx、createxxxxx、その他の機能と同様に、機能/プロセス名をわずかに異なる場合は、 CreateByDefaultFileやCreatedEfaultなど、Delphiの方法。
最後に、DLLのプロバイダーとして、Delphiの.pasや.dcuなどの直接的なプログラミングインターフェイスファイル(できれば.pas、コメントがあるため)、.hおよび.lib cおよびc ++を提供する必要があります。ユーザーに自分で作成させる代わりに。これは、過負荷機能/プロセスが必要な場合に特に重要です。さらに、Delphiアプリケーションとして、提供された.PASファイルは(外部を使用してDLLの出力関数を指定する)以降(LoadLibraryおよびGetProcAddressを使用)を使用します。それが正式(またはhiqos)であり、保証されていることを示しています。