6

私はac#.net 4アプリを使用しており、vs2010を使用しています。c++dll(vs 2005で構築)をインポートしようとしています。

 [DllImport("Card.dll")]

私は失敗します:

DLL'Card.dll'を読み込めません:サイドバイサイド構成が正しくないため、アプリケーションを起動できませんでした。詳細については、アプリケーションイベントログを参照するか、コマンドラインのsxstrace.exeツールを使用してください。(HRESULTからの例外:0x800736B1)

sxstrace.exeを使用すると、次のようになります。

エラー:参照Microsoft.VC80.DebugMFC、processorArchitecture="x86"を解決できません

私はまたそれを見つけました:

MFC80D.DLLとMSVCR80D.DLLがありません

この問題は、リリースの代わりにデバッグコンパイル済みDLLを使用することによって発生したため、これはDebugCRTではないことに注意してください。私は今リリースコンパイルされたdllを使用していますが、問題はDebugMFCです。

オンラインで見つけたものは何でも試しました。時間を節約するために、私が試したことを紹介しますので、このアドバイスは二度と得られません:

1- Microsoft Visual C++2010再頒布可能パッケージ+SP1+セキュリティ更新プログラムをインストールしました

2- Microsoft Visual C++2008再頒布可能パッケージをインストールしました

3-Microsoft Visual C++2005再頒布可能パッケージをインストールしました

4-このアプリを「デバッグ」ではなく「リリース」として実行してみました

5-entryPointをDllImportに設定しようとしました

助けられなかった。それでも同じエラーが発生します。上記のアドバイスの代わりに、オンラインで他のアドバイスを見たことがありません。誰か助けてもらえますか?

4

4 に答える 4

5

「参照Microsoft.VC80.DebugCRT、processorArchitecture = "x86"を解決できません」と表示されているため、VC 8.0のデバッグcrtランタイムへの依存関係が欠落しています。これは、カードのデバッグではなくリリースをビルドする必要があることを意味します。 .dll。Microsoftは、デバッグCRTランタイム用の再配布可能なパッケージを出荷していません。これらはビジュアルスタジオにのみ付属しています。したがって、card.dllのリリースバージョンをビルドすると、状況が改善されます。

于 2012-09-09T11:01:00.100 に答える
3

建物を管理できますCard.dllか?はいの場合は、それがどのように構築されているかを見てください。マニフェストが有効になっている適切なバージョンのVC++(VS 2005で提供されているもの)でビルドする必要があります。次に、2005Redistをインストールします。パッケージは問題を解決する必要があります。自分で作成できない場合はCard.dll、埋め込まれたマニフェスト(存在する場合)を分析し、作成者に連絡して問題を共同で解決する必要があります。

于 2012-09-09T10:45:26.183 に答える
3

静的ライブラリは、デフォルトで動的ランタイムにリンクします。

VS2005 で dll を再構築する場合は、構成プロパティを変更してください。C/C++ | コード生成 | この問題を回避するには、ランタイム ライブラリを静的ランタイムに設定します。

于 2012-09-12T19:06:27.307 に答える
0

You can use Dependency Walker to try to figure out what dependencies your dll pulls. If it says it wants *d.dll, then it looks like it is not a release version. Ask your colleague to check build configuration.

To use debug version you can try the following:

  1. Go to the c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\ (this is for Visual Studio 2008, x86, adjust the path according to your system).
  2. Copy the Microsoft.VC90.DebugCRT and Microsoft.VC90.DebugMFC directories to the directory with your executable.
  3. Adjust the assembly version in the manifest files in the copied directories (the declaration looks like: <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.30729.6161" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>, change the 9.0.30729.6161 according to what your dll needs.
  4. Try to run the application.

The needed assembly version can be found in the output of sxstrace or in the in the *.intermediate.manifest file alongside the dll in its build directory. Sorry, I do not have Visual Studio 2005 and can not give the exact number.

于 2012-09-18T08:46:59.103 に答える