2011-01-11 37 views
0

私はC#winappを持っています。 C#アプリケーションからネイティブの.dllファイル(自分でC++で作成したもの)を呼び出しても問題ありません。C#.NETからWin32ネイティブDLLファイルを読み込めません

しかし、私は他のマシンに自分のアプリケーション(.exeファイルと.dllファイル)をコピーするとき、私はというエラーを取得:

DLLをロードできません

「C:\ dllname.dllを」:指定されたモジュールを見つけることができませんでした。 (HRESULTからの例外:0x8007007E)ここ

は、C#のコードです:

class IsoMessageHelper 
{ 
    public const string ISO8583_DLL = "c:\\Hc8583.dll"; 
    [DllImport(ISO8583_DLL, CallingConvention = CallingConvention.Cdecl)] 
    public static extern bool InitializationRq(...) 
} 

私は何をすべき?

+0

あなたのC#コードから ''宣言を投稿してください。 –

+0

私は投稿を編集し、C#のdllインポートコードも書いています。 – losingsleeep

+0

あなたのコードは、C:\ディレクトリのDLLへのパスをまだハードコードしています。他の答えが示唆しているように、これを行う理由はありません。アプリケーションは、実行可能ファイルと同じディレクトリに配置されたDLLを自動的にロードします。必要なのはファイル名のみです。 –

答えて

5

ネイティブの依存関係を持つ.Netアプリケーションを展開する際の一般的な問題は、ネイティブDLLがターゲットマシン上で依存関係自体を失っている可能性があることです。正しいバージョンのCランタイム

Dependency Walkerなどのツールを使用してネイティブdllを分析し、コピーしたマシンに依存していないかどうかを判断します。

+0

@ user434186あなたはあなたの質問と問題を解決するために役立つ回答を投票し、答えを受け入れる必要があります。 –

+1

ファイルが見つかりませんでした。 @ user434186 @chibacityと言うようにして、良い答えを投票し、前の質問からの最良の答えを受け入れてください。 –

+0

.dllの依存関係です。私のDLLは、MSVCR100.dllのいくつかの機能を使用していますが、デフォルトではwindows \ system32フォルダにはありません。私はdll misingのコピー、それは正常に働いた。ありがとう。 – losingsleeep

1

ファイルの名前を指定するDllImport属性パラメータのパスをハードコードしないでください。次に、実行可能ファイルのほかにファイルが適切であることを確認する必要があります。このような

何か:

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
+0

私はC#.exeファイルの横の.dllをコピーしました。 'C:\\'パスにコピーしてそれに対処することもできますが、問題は存在します! – losingsleeep

1

移動ルートにDLL。それが機能する場合は、属性を調べて理由を調べます。あなたはコードを投稿していないので、私はあなたに何か特別な理由を与えることはできません。

+0

C#.exeファイルの横の.dllをコピーしました。 'C:\\'パスにコピーしてそれに対処することもできますが、問題は存在します! – losingsleeep

関連する問題