Skip to main content.

Documentation on the dl family of calls

dl 系関数の呼び出しに関する文書

イントロダクション

dlopendlclosedlsym そして dlerror の実装は「.dll」を UNIX における「.so」とほぼ同様に扱えるようにします。

説明:

この機能は、もし DLL が同じ順番でロードされたのであれば、fork されたプロセスにおいても DLL は親が使用するアドレスと同じアドレスにマップされるであろうという仮説に基づいています。

使用方法:

DLL のコードにおいて、以下が必ず行われている必要があります。

  1. #include <cygwin/cygwin_dll.h>

    そして以下のマクロ宣言を使用します。

    DECLARE_CYGWIN_DLL(<your entry point>);

    インポートセクションを終了させる取り決めがマクロに含められていることに気をつけて下さい。

  2. リンクの段階で、エントリポイントとして 「__cygwin_dll_entry@12」を使用します。3 つのリンクパスを実行する必要があるかもしれないことに注意して下さい。

  3. dlfork は新しい Cygwin 独自の関数です。この関数のプロトタイプは dlfcn.h にあります。dlfork は引数として int を取り、これは以下に挙げる値を取ります。

    • FORK_NO_RELOAD: これはデフォルトの動作です。子プロセスは親がオープンしたライブラリのリロードを行わず、親の持つハンドルにはアクセス出来ません。
    • FORK_RELOAD: 子プロセスは全てのオープンされた DLL をリロードし、親の持つハンドル(ライブラリ又は関数)にもアクセス出来ます。 これは遅いかもしれないので、必要なときだけ使用するべきです。

    dlfork フラグは子プロセスに引き継がれない大域変数です(即ち、fork されたプロセスは常に FORK_NO_RELOAD で始まります)。