掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28297

windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい
投稿者---higuchi(2006/10/03 01:05:48)


osはxp、コンパイラはborlandのfreecommandlinetools2.exeをダウンロードしたものを使用しています。

c++builderで作ったwindowsのアプリのフォームに、ボタンを作って、そこをクリックすると「dosプロンプト上に>bcc32 ○○.cを入力してエンターを押したのと同じ命令」を出したいです。そして、出力の結果の表示をwindowsのアプリのフォーム上に表示させたいです。

私は、子→親、親→子の2つのパイプをcreatepipeで作っておき、createprocessではdetached_proccessを指定しておいてstartupinfo構造体でリダイレクトを指定すればよいのかと考え、プログラムを作ってみましたが、エラーばかりでコンパイルすることすらできません。

方法自体が間違っているんでしょうか??

私は初心者で、作りたいプログラムがあり張り切ってはいるのですが…、用語などが適切でないかもしれません。質問の内容が何を言っているのか、わからなかったらすみません。
申し訳ありませんが、なにかアドバイス等ありましたら是非ご教示くださいますよう、よろしくお願い申し上げます。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい 28298 YuO 2006/10/03 01:29:24
<子記事> Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい 28299 higuchi 2006/10/03 01:43:12
<子記事> Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい 28300 higuchi 2006/10/03 01:48:31
<子記事> Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい 28305 higuchi 2006/10/03 15:03:31


No.28298

Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい
投稿者---YuO(2006/10/03 01:29:24)


>私は、子→親、親→子の2つのパイプをcreatepipeで作っておき、createprocessではdetached_proccessを指定しておいてstartupinfo構造体でリダイレクトを指定すればよいのかと考え、プログラムを作ってみましたが、エラーばかりでコンパイルすることすらできません。

まず,C言語では大文字・小文字を区別します。createpipeだのcreateprocessだの……は存在しないので,当然ながらエラーになります。


>方法自体が間違っているんでしょうか??

エラーが出るのは単に文法を間違っていたり,制約を満たしていなかったりしているからです。
# ;を忘れていたり宣言していない変数を使おうとしていたり……。

まともな回答を欲するのであれば,エラーの内容をそのまま書く必要があります。


この投稿にコメントする

削除パスワード

No.28299

Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい
投稿者---higuchi(2006/10/03 01:43:12)


ありがとうございます、今すぐコピーしてきます、こんな夜分にありがとうございます。助かります。


この投稿にコメントする

削除パスワード

No.28300

Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい
投稿者---higuchi(2006/10/03 01:48:31)


これで見えますでしょうか、よろしくお願いします。


typedef struct
    {
        HANDLE hWrite;
        HANDLE hRead;
    }PIPE_STRUCT;

    PIPE_STRUCT ToChild;   // 親→子
    PIPE_STRUCT FromChild; // 子→親

    bool f;
    // 親→子パイプ
    f = CreatePipe(&ToChild.hRead, &ToChild.hWrite, NULL, 0);
    if(!f) err; // エラー

    // 子→親パイプ
    f = CreatePipe(&FromChild.hRead, &FromChild.hWrite, NULL, 0);
    if(!f) err; // エラー

    PROCESS_INFORMATION pe;
    STARTUPINFO si;
    ZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb         = sizeof(STARTUPINFO);
    si.dwFlags    = STARTF_USESTDHANDLES; // 標準入出力のリダイレクト
    si.hStdInput  = ToChild.hRead;    // 親→子
    si.hStdOutput = FromChild.hWrite; // 子→親
    si.hStdError  = FromChild.hWrite; // 子→親

    if(!CreateProcess(NULL, "コマンドライン",
        NULL,
        NULL,
        TRUE, // 必ず TRUE
        DETACHED_PROCESS,
        NULL,
        NULL,
        &si,
        &pe))
    {
        // エラー
    }

    DWORD dw;
    // 親→子
    LPTSTR p = "データを送ってみます\n";
    WriteFile(ToChild.hWrite, p, lstrlen(p), &dw, NULL);

    // 子→親 : 
    char buf[256];
    ReadFile(FromChild.hRead, buf, 256, &dw, NULL);

    // 試しに処理

    WaitForSingleObject(hProcess, INFINITE); // 無くていいのか?
    CloseHandle(hThread);
    CloseHandle(hProcess);



この投稿にコメントする

削除パスワード

No.28301

Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい
投稿者---123456789(2006/10/03 09:07:20)


> if(!f) err; // エラー
errってなんでしょう。
そんな名前の変数は無い様に見えますが。
そういう名前の独自関数があるようですが、この書き方は関数ではないですよね。

>{
> // エラー
>}
何も書いてないように見えるのは私の気のせいでしょうか?
それと、出来ればエラーの内容も貼ってください。

所でやりたいことですが、system()関数ではダメなのかな?


この投稿にコメントする

削除パスワード

No.28305

Re:windowsアプリから、dosプロンプトを立ち上げないでコマンドを実行したい
投稿者---higuchi(2006/10/03 15:03:31)


ありがとうございます、エラー夜に貼ってみます、よろしくお願いします。

systemは勉強不足のため使い道がわからないです。今待て使おうとも気がつかずやっていました、調べてみます。ありがとうございました。

初心者のよくわからない書き込みに親身にアドバイスくださってありがとうございます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧