私はunamanged DLL(元はCコードから構築されています)を継承し、.NETプロジェクト。私はDLLの機能をC++型オブジェクトにラップするヘッダファイルを持っています。このオブジェクト指向の機能を公開したいのです。これらのヘッダファイルを標準のC++(Win32)プロジェクトとC++/CLIプロジェクトに#includeして元のDLLを参照すると、すべてうまく動作します。CLI/C++ DLLがアンマネージDLLをラップして実行時にクラッシュしました。(ieshims.dllとgpsvc.dllがありません)
Visual C++ Express 2010を使用して、.NETの管理DLLを構築しようとしました。このDLLは、依存関係の問題のため実行時にクラッシュしました。依存性ウォーカーは言う:
警告:少なくとも1つの遅延負荷依存モジュールが見つかりませんでした。
警告:遅延ロード依存モジュールのエクスポート機能がないため、少なくとも1つのモジュールにインポートされていないインポートがあります。
gpsvc.dllまたはieshims.dllが見つからないと不平を言う。私はこれがx64との関係があることを知っています(私はx64上でWin7を実行しています)が、私のシステム上でDLLをC++プロジェクトで使用できるので、管理DLLでこれを使って同じシステム上の.NETで。
どのような洞察力も提供できる人には、本当にありがとうございます!
(私の目標は、元のDLLでp/invokeを直接使用するのではなく、.NETアセンブリを開発することです。これは、後に限定された相互運用性を持つ多くのC#/ VBプログラマによって使用されるためです)
「プラットフォームターゲット」に関する.NETプロジェクトの設定は何ですか? C#プロジェクト設定の「ビルド」タブを参照してください。 C++ DLLが32ビット用に構築されており、64ビットプラットフォームで実行する場合、「プラットフォームターゲット」は「x86」である必要があります。しかし、これはあなたが観察している問題とは無関係です。 – Manfred
プラットフォームターゲット - x86、安全でないコードが許可されていないことを許可し、最適化コードがチェックされています。ありがとう – Rory
依存性ウォーカーの32ビット版を使用していることを確認してください。このツールは、32ビットの実行可能ファイルが見つかると、32ビットのライブラリ検索ルールを使用するほどスマートではありません。 –