「クラスの外」に[DllImport(・・・)]を書くことはできません。
理由:C#ではメソッドやフィールドは必ずクラス・構造体・インターフェイスの中に定義しなけれはならないからです。
C#の構文上、こういうコードはコンパイルエラーになります:
|
1 2 3 |
// クラスの外ではエラー! [DLLImport(d3d11.dl1)」 internal static extern uint CreateDinect3D11DeviceFromDxGIDevice(Intptr dxgiDevice,out Intptr gna |
正しい形:必ずクラスの中で定義する
|
1 2 3 4 5 |
public static class NativeMethods { [D11Import ("d3d11.d11" )] internal static extern uint CreateDirect3D11DeviceFromDXGIDevice(IntPtr dxgiDevice, out IntPtr } |
補足「クラスの中」であればどこでも良いの?
はい、静的メソッドであればstatic class の中にまとめるのが一般的です。以下のような「ネイティブ関数呼び出し専用クラス」を作っておくのが、可読性と保守性の面でおすすめです。
例:
|
1 2 3 4 5 6 7 |
internal static class D3D11Interop { [D11Import ("d3d11.11")] internal static extern uint CreateDirect3D11DeviceFromDXGIDevice(IntPtr dxgiDevice,out IntPtr [D11Import ("d3d11.d11")] internal static extern uint CreateDirect3D11SurfaceFromDXGISurface(IntPtr dxgiSurface, out Int } |
まとめ
| 項目 | 結論 |
| [D1Import(…….)]をクラスの外に書ける? | 書けません(構文エラー) |
| どこに書くべき? | クラス、通常は static class の中 |
| 複数あるときは? | NativeMethods や InteropHelper などのクラスにまとめると良い |

コメント