Char型の注意点。
参考サイト
VBScriptに引数を渡すには?
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+201010/10100006.txt
参考サイトのサンプル。
-
procedure TForm1.Button1Click(Sender: TObject);
var
FName: String;
begin
FName := 'Test.vbs';
ShellExecute(Handle, 'OPEN', PChar(FName), PChar('1'), nil, SW_NORMAL);
end;
Test.vbsの中身。
-
msgbox WScript.Arguments.Item(0)
実行してボタンを押すとアクセス違反のエラーになります。
Read of adress 00000031 の31はOrd('1')と同じです。
ちなみに、
ShellExecute(Handle, 'OPEN', PChar(FName), PChar('2'), nil, SW_NORMAL);
とすれば Read of adress 00000032 になりますし
ShellExecute(Handle, 'OPEN', PChar(FName), PChar('A'), nil, SW_NORMAL);
とすれば Read of adress 000000041 になります(Ord('A')は10進値で41)
-
procedure TForm1.Button1Click(Sender: TObject);
var
FName: String;
FArg: Char;
begin
FName := 'Test.vbs';
FArg := '1';
ShellExecute(Handle, 'OPEN', PChar(FName), PChar(FArg), nil, SW_NORMAL);
end;
としても同じく Read of adress 00000031 となってしまいます。
どうやらChar型の文字をPCharでキャストするのはNGなようで、上記のような場合はそのまま渡す必要があるようです。
-
procedure TForm1.Button1Click(Sender: TObject);
var
FName: String;
begin
FName := 'Test.vbs';
ShellExecute(Handle, 'OPEN', PChar(FName), '1', nil, SW_NORMAL); //PCharでキャストせずそのまま渡す
end;
-
procedure TForm1.Button1Click(Sender: TObject);
var
FName: String;
FArg: Char;
begin
FName := 'Test.vbs';
FArg := '1';
ShellExecute(Handle, 'OPEN', PChar(FName), FArg, nil, SW_NORMAL); //これもPCharでキャストせずそのまま渡す
end;
2010-10-08: