ハンドルの確認で「宣言が正しく終了していない」

[戻る]
ritz [E-Mail] 2002/12/22(日) 15:33:00
名前付きパイプを作り、そこにCSVファイルの内容を書き込んで
それをデータファイルとして別のアプリケーションに渡したいの
ですが、最初の段階でつまづいています。

下記のソースファイルをコンパイルすると14行目でコンパイル
エラーになります。
-------------------------
#include <stdio.h>
#include <windows.h>

// 名前付きパイプを作成する
HANDLE hPipe = CreateNamedPipe("\\\\.\\pipe\\orald9.pip",
        PIPE_ACCESS_DUPLEX,
        PIPE_WAIT | PIPE_READMODE_MESSAGE | PIPE_TYPE_MESSAGE,
        255,
        1024,
        1024,
        1000,
        NULL);

if(hPipe == INVALID_HANDLE_VALUE) //※ここが問題??
{
    printf("名前付きパイプの作成失敗: err=%d", GetLastError());
    return 1;
}

// クライアントの接続まで待つ
if (! ConnectNamedPipe(hPipe, NULL))
{
    throw "ConnectNamedPipeがエラーを返した。";
}

if (! ReadFile(hPipe, buff, sizeof(buff), &dwBytes, NULL))
{
    throw "ReadFileがエラーを返した。";
}
------------------------------
------エラー内容---------------
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
namedsv.cpp:
エラー E2040 namedsv.cpp 14: 宣言が正しく終了していない
*** 1 errors in Compile ***
------------------------------

参考にしたページは、すべて上記のように書いていたりして、
どこをどのように直せばよいのかが分かりません。
http://www-6.ibm.com/jp/developerworks/linux/011214/j_l-rt4.html
http://homepage2.nifty.com/xad/C/Group22/NamedPipe.htm

一重引用符、二重引用符で囲ってみたりしましたが、
いずれもだめ(コンパイルエラー)でした。

初歩的な質問で恐縮ですが、どなたかご教示ください。
連休明けまでに仕上げたいのですが、前途多難です(^^;;;

環境は
・OS:Windows 2000 Professional
・テキストエディタでソースを書く
・コンパイラ:Borland C++ Compiler 5.5.1
です。

よろしくお願いします。

ax 2002/12/22(日) 16:57:20
上記の処理は関数内に書いていますか?

ritz [E-Mail] 2002/12/22(日) 18:41:01
axさん、レスありがとうございます。

上記がソースのすべてです。
関数内には書いていない、ということに
なろうかと思われます。

関数をたてなければいけないのでしょうか?
よろしくお願いします。

ritz [E-Mail] 2002/12/22(日) 18:55:37
失礼しました!!

int main()
{ 
//上記コード
return 0;
}

で囲んだところ、メッセージは下記警告になりました。
---
警告 W8066 namedsv.cpp 26: 実行されないコード(関数 main() )
---
超初歩的なところで、申し訳ありません。
もう少しやってみます。

#さきほどまでBOOK OFFに参考書探しに行って
 来たのですが、C/C++関係の本は一冊も置かれて
 いませんでした (= =;

RAPT 2002/12/23(月) 14:50:18
こんにちは、RAPTです。

CPPでmain()はないかと。WinMain()でしょう。
それから、C++の勉強をするのに、古本屋に行くより、諦めて普通の本屋に
行って、使用中の言語バージョンに一致する本を買ってきたほうが良いでしょう。

ウェブでなら、「猫でもわかるプログラミング」が有名ですね。
http://www.kumei.ne.jp/

Windows98/VC++6.0pro/SDK-may2002/ATL3.0/WTL7.0

2002/12/23(月) 21:22:41
>CPPでmain()はないかと。WinMain()でしょう。

そんなことはありません。 .cpp であっても main() は当然使えます

ritz [E-Mail] 2002/12/23(月) 23:22:30
島さん、RAPTさん、コメントありがとうございます。

1) CSVファイルの内容をオープンして(CreateFile)
2) メモリに読み出し、(ReadFile)
3) 名前付きパイプにを作り、(CreateNamedPipe)
4) メモリから名前付きパイプに書き込む。(CreateFile-WriteFile)
までは、たぶんできました。
「たぶん」というのはまだ実行できていないからなのですが、
(とりあえずコンパイルはエラー&警告なし)また、つまいづいています。

Cから、既存アプリケーションを起動するにはどうすれば
よいのでしょうか?
具体的には、コマンドラインからオプションをつけて実行する
もので、OracleのSQL*Loaderなのですが
C:\> sqlldr abco/abco@tundra CONTROL=control.sql DATA=\\.\pipe\ora9.pip
というふうなコマンドを、Cの中からキックしたいのですが、
やり方をご存知の方、ご教示ください。

ネット上の情報はいろいろ探しているのですが、いまだ発見には
至りませんので、またまた基礎的なところかもしれませんが、
ご協力、よろしくお願いします。

ritz [E-Mail] 2002/12/24(火) 00:03:38
[[解決]]
すみません、分かりました。
ShellExecute() ですね。

最初の質問は解決しましたので、このツリーは
これにて「解決」チェックします。

3日前は全くC言語知識0だったのが、3日間で
C言語初心者くらいにはなれたような気がします。
実に奥深そうなので、今後も継続的に勉強してみます。

RAPTさん、このラウンジは「猫でもわかるプログラミング」
からリンクされてたので見つけました。
やっぱり有名なんですね。
あのサイトが一番読みやすかったです。

またお世話になることもあるかもしれませんが、
よろしくお願いします。

RAPT 2002/12/24(火) 19:52:07
ちなみに、CreateProcess()というのもあります。

島さん>
> main()
フォローありがとうございます。
# 知らなかった。。
# 私も、一度入門書をひもとく必要があるなぁ、と思いつつ…

古いスレッドには追加発言できません。