構造体は、例えばPOINTAPI構造体では次のように宣言します。

VBscript
Set pt=CreateObject("SfcMini.Structure")
pt _
  "x","Long", _
  "y","Long"





Jscript
var pt=WScript.CreateObject("SfcMini.Structure");
pt(
  "x","Long",
  "y","Long"
);






  • 使用できる変数型は、"Byte" "Integer" "Long" "String" "Unicode"で、Integerは2バイト整数型、Longは4バイト整数型、StringはANSI文字列です。
  • 要素が配列の時は、"objectHandle(1)"の様に10進法で指定してください。このとき、『(』『)』の前後にスペースを入れないでください。
  • 固定長文字列は、"String*256" "Unicode*128"の様に10進法で指定してください。このとき、『*』の前後にスペースを入れないでください。


上記のように宣言すると、『pt.x』 『pt.y』の2つのプロパティにアクセスすることが出来るようになります。また、『pt』をAPIの引数にすることが可能です。

 作成した構造体は、以下のようにしてコピーすることができます。

VBscript
Set pt2=CreateObject("SfcMini.Structure")
pt2()=pt



Jscript
var pt2=WScript.CreateObject("SfcMini.Structure");
pt2()=pt;




サンプルコード

 『comdlg32.dll』の『GetOpenFileName』を呼び出す例です。サンプルスクリプトとして、添付されています。

VBscript
option explicit
Dim GetOpenFileName,OpenFile
Set GetOpenFileName=CreateObject("SfcMini.DynaCall")
GetOpenFileName.Declare "comdlg32.dll","GetOpenFileNameA"
Set OpenFile=CreateObject("SfcMini.Structure")

'Type OPENFILENAME
OpenFile _
"lStructSize","Long", _
"hwndOwner","Long", _
"hInstance","Long", _
"lpstrFilter","String", _
"lpstrCustomFilter","String", _
"nMaxCustFilter","Long", _
"nFilterIndex","Long", _
"lpstrFile","String", _
"nMaxFile","Long", _
"lpstrFileTitle","String", _
"nMaxFileTitle","Long", _
"lpstrInitialDir","String", _
"lpstrTitle","String", _
"flags","Long", _
"nFileOffset","Integer", _
"nFileExtension","Integer", _
"lpstrDefExt","String", _
"lCustData","Long", _
"lpfnHook","Long", _
"lpTemplateName","String"
'End Type

with OpenFile
.lStructSize=76
.lpstrFilter="全てのファイル"+chr(0)+"*.*"+chr(0)+chr(0)
.nFilterIndex=1
.lpstrFile="テスト.txt" + String(256, 0)
.nMaxFile=256
.lpstrInitialDir="C:\"
.lpstrTitle="Open File"
.flags=4
end with
call GetOpenFileName(OpenFile)
msgbox OpenFile.lpstrFile












































Jscript
var GetOpenFileName=WScript.CreateObject("SfcMini.DynaCall");
GetOpenFileName.Declare("comdlg32.dll","GetOpenFileNameA");
var OpenFile=WScript.CreateObject("SfcMini.Structure")

//Type OPENFILENAME
OpenFile (
"lStructSize","Long",
"hwndOwner","Long",
"hInstance","Long",
"lpstrFilter","String",
"lpstrCustomFilter","String",
"nMaxCustFilter","Long",
"nFilterIndex","Long",
"lpstrFile","String",
"nMaxFile","Long",
"lpstrFileTitle","String",
"nMaxFileTitle","Long",
"lpstrInitialDir","String",
"lpstrTitle","String",
"flags","Long",
"nFileOffset","Integer",
"nFileExtension","Integer",
"lpstrDefExt","String",
"lCustData","Long",
"lpfnHook","Long",
"lpTemplateName","String"
);
//End Type

buff="\0";
for (i=0;i<256;i++) buff=buff+"\0";

OpenFile.lStructSize=76;
OpenFile.lpstrFilter="全てのファイル\0*.*\0\0";
OpenFile.nFilterIndex=1;
OpenFile.lpstrFile="テスト.txt" + buff;
OpenFile.nMaxFile=256;
OpenFile.lpstrInitialDir="C:\\";
OpenFile.lpstrTitle="Open File";
OpenFile.flags=4;
GetOpenFileName(OpenFile);
WScript.Echo(OpenFile.lpstrFile.substring(0,256));