2010-12-02 11 views
0

私は宣言していますたとえば、:外部DLLから関数シグネチャを宣言しても、DLLまたは関数が存在しない場合はランタイム例外が発生しません。

internal static class WinAPI 
{ 
    [DllImport("DwmApi.dll", PreserveSig = false)] 
    internal static extern bool DwmIsCompositionEnabled(); 
} 

を私はは私のプロジェクトで機能をDwmIsCompositionEnabled呼び出していないよ、私はDwmApiシステム上でプログラムを実行している場合、これは例外を発生させないことを願っています.dllが存在しません(またはそのDLLに関数が存在しません)。 (実際のケース:DwmApi.dllにはWindows Vistaが必要なため、Windows XPには存在しません)。

答えて

1

これは、APIが呼び出された場合にのみ問題になります。

これを複数の場所から呼び出すと、P/Invokeの薄いC#ラッパーを使用してエラー処理を容易にすることができます。

+0

"P/Invoke上の薄いC#ラッパー"が意味することや、私に例を挙げて説明できますか? – AnAurelian

+0

ネイティブAPIを複数の場所でP/Invokeする場合、これをP/Invokeにして例外をうまく処理するC#Adapterクラスに入れてください。これは、あなたがP/Invokeするたびに、これを全面的に行うのではなく、これです。 –

0

NGENを使用しないでください(つまり、.NET Jitに常に頼っている場合など)。

関連する問題