3

ネイティブ C++ ライブラリを参照するマネージ C++ ライブラリを参照する C# プロジェクトを使用したソリューションがあります。C# プロジェクトには、それを拡張する BaseUserControl と ChildUserControl が含まれています。

問題は、BaseUserControl のコンストラクターでネイティブ C++ のコードが (マネージ C++ ライブラリを介して) 呼び出されると、ChildUserControl をデザイナー ビューで表示できないことです。また、フォームに BaseUserControl または ChildUserControl を追加することもできません。次のエラーが表示されます。

ファイルまたはアセンブリ 'TestLibCPP, Version=1.0.4877.30347, Culture=neutral, PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

どうすればこれを修正できますか?

問題を示す単純な VS2012 ソリューションを含めました。これは、最近 VS2005 から VS2012 に変換された大規模なコードベースで発生している問題に基づいた不自然な例です。

ありがとう

4

4 に答える 4

0

問題は、ネイティブ dll が 32 ビット構成の上に構築されている可能性があります。32 ビット プラットフォームでプロジェクトを構築してみてください。

于 2013-10-30T09:30:22.567 に答える
0

ソース コードがある場合は、configuraion (X86 プラットフォーム) を使用してソリューションを再ビルドしてから、デザイナーで ChildUserControl を開いてください。

于 2013-10-28T03:12:02.937 に答える
0

この問題は、C++ プロジェクトの X86 アーキテクチャに正確に基づいています。WinForms プロジェクトは「任意の CPU」を参照しています。

どこで変更するかを示す写真を含めました(ドイツ語ですが、画面上の位置から見つける必要があります:)

  1. Winforms プロジェクトを右クリックし、設定に移動します
  2. コンパイルタブに切り替えます(それが英語の名前だと思います)
  3. ターゲット プラットフォームを x86 に変更する
  4. 作って楽しんでください ;)

ターゲット プラットフォームの変更方法

編集:

報奨金の質問は、すべてを 64 ビットにセットアップすることに関するものであり、それを達成するには、C++ dll のターゲットを x64 アーキテクチャに設定するだけであることがわかりました。

  1. c++ DLL のいずれかを右クリックし、設定に移動します。
  2. 上部の領域に、構成マネージャーというボタンが表示されます
  3. 新しく開いたウィンドウで、すべての C++ dll を x64 に設定するだけです。
  4. 選択できない場合は、矢印をクリックして、2 番目のプロジェクト用に新しい x64 (ARM ではない) アーキテクチャを作成し、[新規作成] チェックボックスをオフにして、以前に作成したものを選択します。

ここに画像の説明を入力

于 2013-11-01T13:13:33.540 に答える