外部アプリ呼出について

解決


yasu  2004-03-29 23:22:22  No: 8025

delphi初心者です。

delphiで作ったアプリからVBスクリプトへデータを引き渡したいのですが
どのようにすればよろしいでしょうか?
処理のイメージとしてはdelphiのアプリからVBスクリプトへデータを渡し、
VBスクリプトからNotesのDBのデータを更新します。

どなたか教えてくださいよろしくお願いします。


K  2004-03-30 22:33:50  No: 8026

データの形式はどういったものでしょう?

データが一行で収まるならCreateProcessでコマンドライン引数として、
複数行ならファイルに出力してファイル名を渡すなどいろいろあります。


yasu  2004-03-31 00:16:19  No: 8027

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スクリプトのように
できないかも検討しておりますがどちらがシンプルにいけるでしょうか?


K  2004-03-31 01:28:59  No: 8028

まず
  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(...));
と書くこともできます。


yasu  2004-03-31 01:58:41  No: 8029

ありがとうございます。

Delphi側では通るようになりました。
あとはVBスクリプト側で引数としてとれればいいのですね。


yasu  2004-03-31 04:54:58  No: 8030

ありがとうございました。

ひとまず解決いたしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加