DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WinAPIのDLLを扱う

分類:[.NET]

C#からWinAPI関数を扱いたいのですが

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SetScrollInfo(int hWnd, int fnBar,
LPSCROLLINFO lpsi, bool fRedraw);

でSetScrollInfo関数を使いたいのですが

型または名前空間名 'LPSCROLLINFO' が見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。

のようにエラーがでてしまいます
何がいけないのでしょうか?
それとuser32.dllにはどのようなWinAPI関数が定義されているかを
調べるにはどうすればいいでしょうか?

Framework2.0です。
Win32API の構造体は C# の方で改めて定義してあげなければなりません。
Paltform SDK のヘッダファイルとか見て翻訳しましょう。
PInvoke.net とかに既にあるかも知れません。

LP と型名の先頭に付いているのはポインタを表しています。この場合なら SCROLLINFO 構造体のポインタって意味ですね。
で、ポインタを扱う場合などそれなりにお約束があったりするので、Win32API を扱うのなら最低でも以下のツリーを読破しましょう。
http://msdn2.microsoft.com/ja-jp/library/fzhhdwae.aspx

> それとuser32.dllにはどのようなWinAPI関数が定義されているかを
調べるにはどうすればいいでしょうか?
これは順序が逆だと思います。
ある DLL にどんな関数があるか、ではなく、何をしたいかがまずあって、それを実現する関数がどの DLL にあるか、を考えるべきです。

DOBON.NET | プログラミング道 | プログラミング掲示板