2016-08-25 3 views
1

C#のWindowsアプリケーションで使用するためのC++ DLLを作成しました。このDLLは、いくつかのWindows APIにリンクされています。Windows SDKをインストールせずにクライアントPCでコンパイル済みDLLを使用するにはどうすればよいですか?

しかし、私はクリーンなWindows 7でそれを実行するとエラーが発生し、それは "System.DllNotFoundException:DLLを読み込むことができません"と述べた。

Windows SDKをインストールしても問題ありません。 Windows SDKをインストールせずにどのように修正できますか?

+0

なぜWSDKをインストールしないのですか? – Rakete1111

+3

私はクライアントのコンピュータがSDKのような開発ツールを必要とすべきではないと思っています。私の考えは正しいかどうかは分かりません。 –

+1

"missing dll"の最初の疑いがC++ランタイムです。クリーンなWindows 7のボックスにC++ランタイム(使用しているVisual Studioのバージョン用)をインストールするだけの場合はどうなりますか?もう1つのアプローチは、(あなたがコードからこれを判断できない場合)デシジョンビューアを使用して、欠落しているdll(Dependency Walkerなど)を特定することです。一度識別されると、欠落しているサブシステムとインストールされているか、パスが固定されてその場所が含まれます。 – Niall

答えて

4

「欠落しているdll」の最初の疑いがあるのは、C++ランタイムであり、一般的にはWindows OSインストールの一部ではありません。クリーンなWindows 7のボックスにC++ランタイム(使用しているVisual Studioのバージョン用)をインストールするだけの場合はどうなりますか?

依存関係が見つからない場合は、依存関係ビューアを使用して、見つからないDLL(Dependency Walkerなど)を特定します。いったん特定されると、欠落しているサブシステムとインストールされるか、またはファイルの場所が含まれるように修正されます。

dllの「デバッグ」バージョンまたは「リリース」バージョンを配布していますか?

私は "デバッグ"を使用しています。

C++ランタイムの再配布可能ファイルには、「デバッグ」バージョン、「リリース」バージョンのみが含まれています。 "リリース"モードでDLLをビルドし、Windows 7のボックスでそのDLLを実行します。

"debug"バージョンは、通常、dll /アプリケーションのデバッグにのみ使用されるため、SDKの要件は妥当です。一方、アプリケーションをデバッグしないときは、SDKの使用は妥当ではないため、クライアントに「リリース」バージョンを配布することをお勧めします。

関連する問題