*なでしこ名(引数宣言)= DLL("DLL名","C言語宣言")
なでしこの命令の名前
必ずC言語宣言と同じ数の引数を書くこと
DLLの名前
例えばダイアログを表示するAPIの場合、以下のように宣言ができる。
●MessageBox(h,t,c,u) =DLL("user32.dll", "int MessageBoxA(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
)")
基本的に、引数の型として利用できるのは、以下の9種類だがWindowsSDKでよく使われるUINTやLPCTSTRやHWND、BOOLなどは、以下の型に単純置換されるようになっている。
CHAR/BYTE/SHORT/WORD/LONG/DWORD/POINTER/CHAR*/VOID
また、"LP*" "P*"はPOINTERに。"H*"はDWORD型に単純置換される。
なでしこでは内部に、文字列、整数や実数など実際の型をバイナリで管理している。
DLL呼び出しで、宣言にポインタ型があった場合、単純に変数のデータポインタを引数と与えてしまう。
そのため、文字列のポインタを与えるところで、整数へのポインタを与えると、内部でアクセス違反が発生してしまう。文字列を引数に持つDLL関数を呼ぶ場合には、
変数 = TOSTR(変数)
として、呼び出す変数の型に注意すること。整数へのポインタを利用したい場合は、
変数P = POINTER(整数変数)
と変数データへのポインタを取得して関数を呼ぶ。