27

VSによってビルドされた(純粋なネイティブC ++).DLLがあります。クライアントとして、いくつかのネイティブC ++アプリケーションと、C ++/CLIで記述されたこのDLLの周りの.Netラッパーがあります。最後に、C#で記述された.Net-Wrapper用のクライアントアプリケーションがいくつかあります。

私の問題は、native.dllを.Netの世界とは異なる方法で配布する必要があり、VSがそのDLLを追跡しないことです。したがって、すべてのC#アプリを正しく機能させるには、各実行可能ディレクトリにコピーするか、%PATH%のどこかに配置する必要があります(開発者のコ​​ンピューターでは、DLLのバージョンが異なるさまざまなアプリを起動する可能性があるため避けます)。Wrapper-DLLを参照するUserControlがある場合、さらに大きな問題が発生します。DLLをVSのディレクトリにコピーするか、%PATH%に再度コピーする必要があります。しかし、最悪のケースは、翻訳ツールで発生します。このツールは、.Netアセンブリを追跡し、それらを外部のトランスレータに送信できるトランスレータパッケージにパックします。私の知る限り、ネイティブ.DLLをそのパッケージに入れる方法はありません。

そのため、ネイティブDLLを静的に.Net-Wrapperにリンクして、問題を解決する予定です。ただし、ネイティブアプリケーションの場合、このネイティブDLLは引き続きDLLである必要があります。

したがって、2つのオプションがあります。

  • その2つのプロジェクトを作成します(1つは静的ライブラリを生成し、もう1つは動的ライブラリを作成します=>これを回避しようとします)
  • DLLを静的にリンクするための解決策を見つける
  • VSが1つのプロジェクトから2つの出力を生成するようにする方法を見つける
4

4 に答える 4

7

dll の C++ プロジェクト ファイルで、DLL を生成する構成と .lib を生成する構成の 2 つの構成を作成します。.NET/C++ プロジェクトは複数のビルド構成をサポートできるため、2 つのプロジェクトは必要ありません (これが、リリース バージョンとデバッグ バージョンのビルドの違いです)。

于 2009-11-04T20:13:56.823 に答える
6

もう 1 つのオプションは、2 つのプロジェクトを用意することです。1 つのプロジェクトは静的にリンクできる .lib を出力し、2 つ目のプロジェクトは .dll を出力し、依存関係として .lib を持ちます。.def を .dll に追加する必要があります。エクスポートしようとしているシンボル。そうしないと、空になります。

于 2009-01-10T23:16:38.503 に答える
5

DLLのコピーを Lib に取得します(編集: 安価なオプションが見つからない場合)

于 2009-01-08T12:11:48.700 に答える