1

C ++/CLIで記述されたプロジェクトがあります。マネージコードにあるタイプもあれば、完全にネイティブなコードにあるタイプもあります。.Netフレームワークのバージョンがインストールされていないマシンで生成されたDLLがあるとしましょう。別のネイティブアプリケーションが私の「混合モード」DLLとリンクし、ネイティブタイプのみを使用する方法はありますか?「/clr」スイッチを追加すると、Dllは自動的にいくつかの.Net Framework Dll(mscorjit、mscoreeなど)に依存することに気付きました。実際に、そこで定義されている100%ネイティブタイプを使用しようとすると、アプリケーションは、それらの.Net Framework Dllをロードしようとします(コードのその部分でフレームワークを使用していなくても)。
それで、そのような場合にそれらのDLLをロードすることを避けることは可能ですか?(私が見ているように、他のオプションは、管理対象のものを除いて、すべてのネイティブタイプを含む別のネイティブプロジェクトを作成することです)。

ありがとう

4

1 に答える 1

3

いいえ。混合モードアセンブリ(/ clr)をロードすると、DllMainの実行直後に、.cctorが実行され、フレームワークがアプリケーション用にまだセットアップされていない場合は初期化されます。

これがないと、マネージAPIを必要とする関数を呼び出すとすぐに大ヒットします。詳細については、MSDNの「混合アセンブリの初期化」を参照してください。

最適なオプションは、ネイティブAPIを個別のDLLにし、混合モードアセンブリを個別のプロジェクトにして、必要に応じて個別にロードできるようにすることです。

于 2009-10-06T19:23:12.477 に答える