VSによってビルドされた(純粋なネイティブC++).DLLがあります。クライアントとして、いくつかのネイティブC++アプリケーションと、この周りの.Net-WrapperがありますDLL C++/CLIで記述されています。最後に、C#で記述された.Net-Wrapperのクライアントアプリケーションがいくつかあります。
私の問題は、native.dllは.Netの世界とは異なる方法で配布する必要があり、VSがそのDLLを追跡しないことです。したがって、すべてのC#アプリを正しく機能させるには、それを各実行可能ディレクトリにコピーするか、%PATH%のどこかに置く必要があります(開発者のコンピューターでは、異なるバージョンのDLLで異なるアプリを起動したい場合があるため、これを避けます)。 Wrapper-DLLを参照するUserControlがある場合は、さらに大きな問題が発生します。DLLをVSのディレクトリにコピーするか、再度%PATH%にコピーする必要があります。ただし、最悪の場合は翻訳ツールで発生します。このツールは.Net-Assembliesを追跡し、それらをTranslator-packagesにパックして、外部トランスレーターに送信できますが、私の知る限り、ネイティブ.DLLをそのパッケージに入れる方法はありません!
したがって、ネイティブDLLを静的に.Net-Wrapperにリンクして、問題を解決します。ただし、ネイティブアプリケーションの場合、このネイティブDLL DLL。
だから私は2つのオプションがあります:
DLLのC++プロジェクトファイルで、2つの構成を作成します。1つはDLLを生成し、もう1つは.libを生成します。NET/ C++プロジェクトはサポートできるため、2つのプロジェクトは必要ありません。複数のビルド構成(これにより、リリースバージョンとデバッグバージョンのビルド方法が異なります)。
別のオプションは2つのプロジェクトを持つことです。1つのプロジェクトは静的にリンクできる.libを出力し、2つ目のプロジェクトは.dllを出力し、.libを依存関係として持つため、.dllに.defを追加する必要があります。エクスポートする予定のシンボル、またはそうでなければ空になります。
DLLをLibにコピーします (編集:より安価なオプションが見つからない場合)
Dllを生成し、dllexport
を使用してエントリポイントをlibにエクスポートできます。これについては、ここで説明します