delphi初心者です。
delphiで作ったアプリからVBスクリプトへデータを引き渡したいのですが
どのようにすればよろしいでしょうか?
処理のイメージとしてはdelphiのアプリからVBスクリプトへデータを渡し、
VBスクリプトからNotesのDBのデータを更新します。
どなたか教えてくださいよろしくお願いします。
データの形式はどういったものでしょう?
データが一行で収まるならCreateProcessでコマンドライン引数として、
複数行ならファイルに出力してファイル名を渡すなどいろいろあります。
Kさん返信ありがとうございます。
データは一行で収まる形式を想定しています。
現在、CreateProcessでコマンドラインに引数として渡して
いるのですがうまくVBスクリプトへ引渡しがされていません。
お恥ずかしいお話ですがプログラム初心者なもので他システム
連携をやったことがない為、悪戦苦闘しております。
プログラムは下記のように記述しております。
var
hoge :string;
SI :TStartupInfo;
PI :TProcessInformation;
begin
GetStartupInfo(SI);
hoge := 'C:\work\CMI\SRC\Unit1\project1.exe'+''+Edit1.Text;
If Not CreateProcess(nil,
PChar(hoge),
nil,
nil,
False,
CREATE_DEFAULT_ERROR_MODE,
nil,
nil,
SI,
PI) then
Raise Exception.Create('Exec Error ' + IntToStr(GetLastError));
While WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
Application.ProcessMessages;
end;
また、これ以外にもDelphiからNotesのDBにVBスクリプトのように
できないかも検討しておりますがどちらがシンプルにいけるでしょうか?
まず
hoge := 'C:\work\CMI\SRC\Unit1\project1.exe'+''+Edit1.Text;
でプログラムと引数がくっついてしまっています。''->' '
Win32APIのリファレンスではCreateProcessの引数の渡し方が以下のようになっています。
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 実行可能モジュールの名前
LPTSTR lpCommandLine, // コマンドラインの文字列
なので
CreateProcess('C:\work\CMI\SRC\Unit1\project1.exe', PChar(Edit1.Text), ...
が正しいと思います。
>then Raise Exception.Create('Exec Error ' + IntToStr(GetLastError));
あと直接関係関係ないですがWin32APIの呼び出しは
Win32Check(CreatProcess(...));
と書くこともできます。
ありがとうございます。
Delphi側では通るようになりました。
あとはVBスクリプト側で引数としてとれればいいのですね。
ありがとうございました。
ひとまず解決いたしました。
ツイート | ![]() |