8

C++ DLL を使用し、.NET4.5 をターゲットとする Visual Studio 2012 で WPF を使用して C# アプリケーションを構築しました。C# プロジェクト用と C++ DLL プロジェクト用の 2 つのプロジェクトを実行しています。両方のプロジェクトを、同じフォルダー.exeに C#.dll用と C++ 用があるフォルダーにリリースしました。

それらが開発されたマシンでそれらを実行すると、すべて正常に動作します。を他のマシンで実行する.exeと、次の例外がスローされます。

System.DllNotFoundException: DLL を読み込めません

同じフォルダにあるDLLを認識していません。

私は多くのことを試しましたが、何もうまくいかないようです。この投稿の解決策に従いましたが、何も機能しませんでした。

Dev マシンとターゲット マシンは同一です。Dev では Visual Studio 2012 がインストールされていますが、それが唯一の違いです。

コード:

C#:

[DllImport(@"Wireless.dll", EntryPoint = "?cert_exists@certificate@CertFuncs@@SAHHPBD@Z", CallingConvention = CallingConvention.Cdecl)]
    static extern int cert_exists(int store, [MarshalAs(UnmanagedType.LPTStr)]string cert_str);

C++:

static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);

アップデート:

ターゲット マシンに Visual Studio 2012 をインストールすると、すべて正常に動作します。削除すると、アプリケーションが再びクラッシュします。アプリケーションを機能させることができる VS の追加に関するアイデアはありますか?

4

2 に答える 2

9

推測: ユーザーのマシンに Microsoft Visual C++ 2012 Redistributable Package をインストールします。使用するネイティブ DLL には、インストールする必要がある他の依存関係がある場合があります ( Dependency Walkerを試してください)。ネイティブ DLL がたとえばレジストリ設定、構成ファイルなどを必要とする場合、これらも存在する必要があります。開発マシンにインストールしたのと同じ方法で、ユーザー マシンに配布する必要があります。

于 2013-01-29T17:06:17.980 に答える
-1

これは、プロジェクトのビルド構成が「デバッグ」であることが原因です (ソリューションを右クリックして、[プロパティ] -> [構成プロパティ] -> [デバッグ] に設定されたすべてのプロジェクト構成が表示されるはずです)。exe(「デバッグ」モードでビルドされている)を実行している場所にビジュアルスタジオをインストールする必要があります。

これを回避するには、構成を「リリース」に変更し、プロジェクトを再構築します。

于 2017-01-06T09:34:07.620 に答える