2009-06-04 9 views
0

私はネイティブCコードを持っていましたが、vC++ 2008でコードをコンパイルし、 'x64'私はプラットフォームとして 'x64'でコンパイルされ、dll関数を呼び出しているC#アプリケーションを持っています。私は以下のようにdllimportを使用してDLLから関数を呼び出しました。64ビットプロセスで64ビットのDLLが見つかりません - DLL 'dllname'を読み込めません:指定されたモジュールが見つかりませんでした

型「System.DllNotFoundException」の未処理の例外がTEST.EXE

で発生しました追加情報:私は以下のようにエラーを取得していたアプリケーションを実行している時の

using System.Runtime.InteropServices; 

namespace test    
{  
public partial class Form1 : Form              
    { 

     [DllImport("mtest", CharSet = CharSet.Ansi)] 
     public extern static void e_path(string path); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private void button1_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("test"); 
      swe_set_ephe_path("E:\\Gan"); 
     } 
    } 
} 

にできません。 load DLL 'mydll':指定されたモジュールが見つかりませんでした。 (HRESULTからの例外:0x8007007E)

これを解決するために私を助けてください。私は、DLLとアプリケーションの両方を動作させる場合は、正常に動作します。しかし私は私のASPページから呼び出されるdll関数が必要なので、私は64ビットとしてdllとアプリケーションの両方が必要です。

追加情報:依存関係ウォーカーの64ビット版依存関係をチェックしたところ、Kernel32.dllとNTDLL.DLLとmydll.dllがx64であることがわかりました。

私にこれを手伝ってください。事前に

おかげで、

+0

// HKEY_LOCAL_MACHINEに存在する「私はDLLとapplicaitionその作業罰金の両方を実行する場合。」 –

+0

dllが32ビットで、アプリケーションがx86プラットフォームで動作していればうまく動作します。 –

+0

ProcessMonitor(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)を試して、正確に何がうまくいかないかを確認することをお勧めします。ライブラリをロードしようとするすべての試行とそれに対応する依存関係が表示され、ソリューションにつながる可能性があります。 – sharptooth

答えて

0

は、問題は、あなたのDLLがいくつかの他のDLLに依存していることであり、それは、ローダがそれを検索していないいくつかのパスやそのDLLであるため、他のdllを配置することができません64ビットではありません。

+0

依存関係ウォーカー64ビットを使って依存関係を調べたところ、Kernel32.dllとNTDLL.DLLとmydll.dllはx64であることがわかりました。 –

3

x64プラットフォームの場合、SYSWOW64ディレクトリには32ビットアプリケーション用のファイルが含まれています。 レジストリには、SYSWOW64にx32アプリケーションのエントリが含まれているのと同じ違いがあります。 挨拶

コメント:32ビットエントリを含むレジストリキーがWOW6432NODEであり、あなたが言うとき、あなたは何を意味するか説明でき

+0

これは私に別の問題を助けました。これを投稿していただきありがとうございます。 – tronious

関連する問題