-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
nako_winscript.dpr
160 lines (135 loc) · 3.82 KB
/
nako_winscript.dpr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
library nako_winscript;
uses
FastMM4 in 'FastMM4.pas',
Windows, SysUtils, Classes,
unit_string in 'hi_unit\unit_string.pas',
hima_types in 'hi_unit\hima_types.pas',
mt19937 in 'hi_unit\mt19937.pas',
ComObj,
ActiveX,
Variants,
dll_plugin_helper in 'hi_unit\dll_plugin_helper.pas',
dnako_import in 'hi_unit\dnako_import.pas',
dnako_import_types in 'hi_unit\dnako_import_types.pas';
//------------------------------------------------------------------------------
// 登録する関数
//------------------------------------------------------------------------------
var scriptObj:Variant;
procedure init_my_script;
begin
if VarIsNull(scriptObj) then
begin
scriptObj := CreateOleObject('MSScriptControl.ScriptControl');
end;
end;
function procExecJScript(h: DWORD): PHiValue; stdcall;
var
src, res: string;
res_v: Variant;
begin
// (1) 引数の取得
src := getArgStr(h, 0, True);
// (2) 処理
init_my_script;
scriptObj.Language := 'JScript';
res_v := scriptObj.Eval(src);
res := VarToStr(res_v);
res_v := Unassigned;
// (3) 戻り値の設定
Result := hi_newStr(res); // 整数型の戻り値を指定する
end;
function procExecVBScript(h: DWORD): PHiValue; stdcall;
var
src, res: string;
vres: Variant;
begin
// (1) 引数の取得
src := getArgStr(h, 0, True);
// (2) 処理
init_my_script;
scriptObj.Language := 'VBScript';
vres := scriptObj.Eval(src);
res := vres;
vres := Unassigned;
// (3) 戻り値の設定
Result := hi_newStr(res); // 整数型の戻り値を指定する
end;
function procExecVBScriptAddCode(h: DWORD): PHiValue; stdcall;
var
src: string;
begin
// (1) 引数の取得
src := getArgStr(h, 0, True);
// (2) 処理
init_my_script;
scriptObj.Language := 'VBScript';
scriptObj.addCode(src);
// (3) 戻り値の設定
Result := nil; // 整数型の戻り値を指定する
end;
//------------------------------------------------------------------------------
// プラグインとして必要な関数一覧
//------------------------------------------------------------------------------
// 設定するプラグインの情報
const S_PLUGIN_INFO = 'JScript/VBScript ライブラリ by クジラ飛行机';
function PluginVersion: DWORD; stdcall;
begin
Result := 2; //プラグイン自身のバージョン
end;
procedure ImportNakoFunction; stdcall;
begin
// 関数を追加する例
//<命令>
//+ScriptControl拡張(nako_winscript)
//-VBSCRIPT/JSCRIPT操作
AddFunc('JSCRIPTする','{=?}Sを',7300,procExecJScript,'JScriptのプログラムを実行する','JSCRIPTする');
AddFunc('VBSCRIPTする','{=?}Sを',7310,procExecVBScript,'VBScriptのプログラム(式)を実行する','VBSCRIPTする');
AddFunc('VBSCRIPTコード追加','{=?}Sを',7311,procExecVBScriptAddCode,'VBScriptのプログラムを定義する','VBSCRIPTこーどついか');
//</命令>
end;
//------------------------------------------------------------------------------
// 決まりきった情報
function PluginRequire: DWORD; stdcall; //なでしこプラグインバージョン
begin
Result := 2;
end;
function PluginInfo(str: PChar; len: Integer): Integer; stdcall;
begin
Result := Length(S_PLUGIN_INFO);
if (str <> nil)and(len > 0) then
begin
StrLCopy(str, S_PLUGIN_INFO, len);
end;
end;
procedure PluginInit(Handle: DWORD); stdcall;
begin
OleInitialize(nil);
dnako_import_initFunctions(Handle);
scriptObj := Null;
end;
function PluginFin: DWORD; stdcall;
begin
Result := 0;
if not VarIsNull(scriptObj) then
begin
scriptObj := Unassigned;
end;
OleUninitialize;
end;
//------------------------------------------------------------------------------
// 外部にエクスポートとする関数の一覧(Delphiで必要)
exports
ImportNakoFunction,
PluginInfo,
PluginVersion,
PluginRequire,
PluginInit,
PluginFin;
{
initialization
OleInitialize(nil);
finalization
OleUninitialize;
}
begin
end.