1

という名前の DLL がありますLib.ddl。dllには、整数をパラメーターとして受け取るaddという名前の関数があります。

Windows API を使用し、次のクラスを使用します。

class WindoswAPI
{
    public:
         WindowsAPI();//constructor 
         //helper functions
         ~WindowsAPI();
    private:
}

このライブラリをクラスのコンストラクターにロードするにはどうすればよいですか。ヘルパー関数を介して関数を抽出し、デストラクタで関数をアンロードしますか? インターネットで解決策とヘルプを探しましたが、何も見つかりません。

4

2 に答える 2

1

プロセスに dll をロードするには、最初にLoadLibraryEx()を調べる必要があります。次に、 GetProcAddress()を使用して、関数へのポインターを名前で取得できます。HMODULE2 番目の関数から要求されたパラメーターは、最初の関数によって返されることに注意してください。GPF を発生させずに関数を呼び出すには、関数のシグネチャを注意深く知る必要があるため、機能させる前にデバッグを行う必要がある場合でも驚かないでください。とにかく最初に簡単に確認できるのは、両方の関数の戻り値です。最初の関数はゼロ以外の値を返す必要があります (実際にはdllが読み込まれる仮想アドレスを返しますNULL) 。同じGetProcAddress、それがゼロを返す場合、何かがうまくいかず、通常は関数名のスペルが間違っています。前に言ったように、からのアドレスGetProcAddressを取得しても、終了したことを保証するものではありません。関数の呼び出し方法を完全に知っている必要があります。dll からどの名前が公開されているかを調べるのに助けが必要な場合は、便利なDUMPBIN.EXEを見つけることができます。これは、Visual Studio Tools コマンド プロンプトから既に利用できるはずです。コードが dll で終了したら、FreeLibrary()を使用してアンロードを試みることができます。

于 2012-11-06T11:21:40.887 に答える
1

POCO C++ Librariesを見てください。これには、手書きの回避策とボイラープレートを回避するための非常に優れたクロスプラットフォームDLL-Loaderが含まれています。

于 2012-11-06T11:27:42.437 に答える