ネイティブ DLL の関数を呼び出したい,の巻
2003/11/17 新規
唐突ですが、以下のサイトが非常に有用です。
ネイティブ(Win32)DLL で定義された関数を呼び出すのは(引数がなければ)簡単で、すぐにできます。 ですが、その DLL が一体いつ読み込まれているのかは不明です。
そもそも、VC++ ではこんな感じで DLL をロードしてると思います。
かわって、問題の C# では。
例えば こんな感じに、使用する DLL の関数を "属性付き" で宣言してしまいます。
すると あとは何も考えず使い放題です。
例1
[DllImport("kernel32.dll")]
public static extern bool Beep(uint dwFreq,uint dwDuration);
|
流れを書けば、こんな感じになると思います。
そんなのはイヤで、「明示的に DllMain() 関数を呼び出たい!」という人には、このサイトがお勧めです。
要約すると、「C# に“Win32 DLL を読み込む明示的な手法”がなければ、Win32 API を利用してしまえ!」という感じです。
例2
[DllImport("kernel32")]
public extern static int LoadLibrary(string lpLibFileName);
[DllImport("kernel32")]
public extern static bool FreeLibrary(int hLibModule);
[DllImport("kernel32",CharSet=CharSet.Ansi)]
public extern static int GetProcAddress(int hModule,string lpProcName);
|