3

実行可能ファイルで定義されたクラスを使用するには、DLLが必要です(DLLと実行可能ファイルは同じコンパイラでコンパイルされます)。しかし、このクラス定義のソースコードをDLLで使用できるようにしたくはなく、宣言のみを使用します。

これを行うための1つの可能な方法は、必要なすべてのクラスメソッドを作成することですvirtual(DLLリンカーがこれらのメソッドの定義を必要としないようにするため)。このアプローチの欠点:

  1. を使用して、エクスポートされたクラスのオブジェクトをDLLコードで作成できませんnew(実行可能ファイルのコードで追加の関数を作成する必要があります)。
  2. virtual必要がない場合でも、これらすべてのメソッドを作成する必要がありますvirtual

__declspec(dllexport)Microsoftのstorage-class拡張属性を使用して、DLLから実行可能ファイルにクラスをエクスポートする方法があります。同じ手法を使用して、実行可能ファイルからDLLにクラスをエクスポートする方法はありますか?

私の古いBorlandC6コンパイラでは、実行可能プロジェクトのビルド中にインポートライブラリを作成できません。(したがって、DLLをコンパイルするときに、リンカーは、インポートされたすべての非仮想クラスメソッドに対して未解決の外部エラーメッセージを表示します。)これは、まさにこのコンパイラの制限ですか、それとも重要な何かが欠けているのでしょうか。

4

3 に答える 3

3

私の知る限り、MS VS の dllexport を使用してクラスまたは関数を exe からエクスポートし、それを DLL で使用することは問題ありません。DLL と Exeが 1 つのプロセスで実行されると、クールに動作します。

于 2009-02-28T01:18:28.337 に答える
2

最初の DLL に本当に入れたくない場合は、クラスを 2 番目の DLL に入れることができます。

ただし、クラスをDLLに入れるだけではないというあなたの理由を理解するのに苦労しています。

ETA:さらに掘り下げて、Visual Studio 2008 で EXE プロジェクトからインポート ライブラリを生成する方法を説明するこのリンクを見つけました。

于 2009-02-27T13:31:40.593 に答える