DLLの呼び出し
マクロの言語仕様だけでは実現できないことも、既存のDLLを呼び出せば実現できることがあります。
DLLの呼び出しは、使い方を間違えばシステムダウンの原因となります。c言語および Windows API の知識を持った方のみが使用してください。
DLLから返値以外でデータを受け取る場合、引数に可変長文字列型/固定領域文字列型/ユーザ定義データ型のどれかを指定します。ただし、配列を使用することはできません。
DLLに渡されるときに自動的にポインタに変換されます。
可変長文字列型の時は、文字列の最後に '\0' が付加されてDLLに渡されます。
固定領域文字列型のときは、文字列の長さが最大の長さでないときに限り '\0' が付加されてDLLに渡されます。よって、dim a$ as string[10] として定義したときは、9バイトまでしか代入しないでください。
引数に NULL を渡したいときは、単に 0 と記述してください。"" と記述すると、'\0' を指すポインタが渡されてしまいます。
DLLから戻ってきたときに、引数にした可変長文字列型変数の &H00 以降の部分は切り捨てられます。
例1
dllname KERNEL
cdeclarea int GetWindowsDirectory(LPSTR, int);
proc main()
dim a$ as string
a$ = string$(256, 0)
GetWindowsDirectory(a$, 256)
dim b$ as string[256]
GetWindowsDirectory(b$, 256)
end proc
例2
type RECT
Left as default
Top as default
Right as default
Bottom as default
end type
dllname USER
cdeclare void GetWindowRect(HWND, RECT *);
proc main()
dim rc as RECT
GetWindowRect(@@hwnd, rc)
print cformat$("left=%d, top=%d, right=%d, bottom=%d", rc.Left, rc.Top, rc.Right, rc.Bottom)
end proc
最新情報 TOP マクロTOP