2009-06-04 32 views
1

コンパイルしたプラットフォームを変更してdllをx64に変換するためにVC++(VS2008)でコンパイルを試みたときに、ネイティブCを使用して書き込まれた32ビットのDLLがありました。しかし、 'x64'プラットフォームのC#アプリケーションからdllにアクセスしようとすると、dllをロードできなくなります。私はアプリケーションとDLLをリンクするためにDllimportを使いました。指定されたモジュールが見つかりません - 64ビットdll

Vistaで使用しているオペレーティングシステムですが、私のアプリケーションからat dll関数を呼び出すことができず、dllをロードできませんでした。

この問題を解決する方法はありますか?

あなたのお手伝いを楽しみにしています。

よろしく、 ジョージア

+0

もう少し情報が必要です:64ビットVistaで実行していますか? C#アプリケーションの32ビットDLLを使用できますか? –

+0

これを64ビットOSで実行している場合は、[ビルド]タブでCPUタイプをx86に設定していないことを再度確認します。 (これは、32ビットのDLLと64ビットのOSを使用していた場合には当てはまります) –

+0

x64のみをチェックしました。 –

答えて

0

「依存関係ウォーカー」(勝つためのlddのようなツール、www.dependencywalker.com)を試して、何に対して何のリンクがあるか調べてください。役に立つかもしれない。

+0

Visual Studioのコマンドプロンプトで "dumpbin/DEPENDENTS MyModule.dll"を使用して、依存関係を表示することもできます。私の場合はVCRuntime140.dllがありませんでした。 – Michael

0

私の推測では次のようになり、依存関係は、あなたの新しいDLLは、それが必要であることをいくつか欠けている64ビットのDLLのを有することができます。

+0

私はdependency walkerを使用してこのDLLの依存関係を示していないことを確認しました。だから私はここで何が問題か推測できませんでした。 –

+0

読み込みに失敗した場合、どのようなエラーコードが表示されますか? 実験として試してみて、小さなC++ x64プログラムを作成してDLLを読み込み、問題がDLLか.NETの問題であるかどうかを確認するだけです。 –

0

dllのさまざまなバージョン(x86/x64)をどこにビルドしているか確認してください。

最も簡単なことは、64ビットdllのターゲットディレクトリをターゲットフォルダの 'x64'サブディレクトリに設定することです。 64ビットのソリューション構成では、C#のターゲットディレクトリを 'x64'ディレクトリに設定します。

これにより、各プラットフォームのexeが正しいdllをロードしようとします。

0

ありがとうございました。

私はC:\ Windows \ System32 \の下にdllを置いたとき、エラーが解決しました。

おかげで、 ジョージア

+1

これを答えとしてマークする必要がありますか? – kbyrd

-1

は、私はかつて、これらの線に沿ってこれで問題がありました。私は、C#から呼び出す必要があったハードウェアのインターフェイスとして動作するC++ DLLを持っていました。しかし、ハードウェアが接続されていなければ、DllImport呼び出しは失敗します。これは、DLLの初期化関数が失敗を返すため、C#はDLLをロードできないと言っています。 DLLはです。

CコードでDLLを設定するときに何らかのエラーが発生していないことを確認します。

関連する問題