名前付きパイプを作り、そこに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さん、レスありがとうございます。
上記がソースのすべてです。
関数内には書いていない、ということに
なろうかと思われます。
関数をたてなければいけないのでしょうか?
よろしくお願いします。
失礼しました!!
int main()
{
//上記コード
return 0;
}
で囲んだところ、メッセージは下記警告になりました。
---
警告 W8066 namedsv.cpp 26: 実行されないコード(関数 main() )
---
超初歩的なところで、申し訳ありません。
もう少しやってみます。
#さきほどまでBOOK OFFに参考書探しに行って
来たのですが、C/C++関係の本は一冊も置かれて
いませんでした (= =;
こんにちは、RAPTです。
CPPでmain()はないかと。WinMain()でしょう。
それから、C++の勉強をするのに、古本屋に行くより、諦めて普通の本屋に
行って、使用中の言語バージョンに一致する本を買ってきたほうが良いでしょう。
ウェブでなら、「猫でもわかるプログラミング」が有名ですね。
http://www.kumei.ne.jp/
Windows98/VC++6.0pro/SDK-may2002/ATL3.0/WTL7.0
>CPPでmain()はないかと。WinMain()でしょう。
そんなことはありません。 .cpp であっても main() は当然使えます
島さん、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の中からキックしたいのですが、
やり方をご存知の方、ご教示ください。
ネット上の情報はいろいろ探しているのですが、いまだ発見には
至りませんので、またまた基礎的なところかもしれませんが、
ご協力、よろしくお願いします。
すみません、分かりました。
ShellExecute() ですね。
最初の質問は解決しましたので、このツリーは
これにて「解決」チェックします。
3日前は全くC言語知識0だったのが、3日間で
C言語初心者くらいにはなれたような気がします。
実に奥深そうなので、今後も継続的に勉強してみます。
RAPTさん、このラウンジは「猫でもわかるプログラミング」
からリンクされてたので見つけました。
やっぱり有名なんですね。
あのサイトが一番読みやすかったです。
またお世話になることもあるかもしれませんが、
よろしくお願いします。
ちなみに、CreateProcess()というのもあります。
島さん>
> main()
フォローありがとうございます。
# 知らなかった。。
# 私も、一度入門書をひもとく必要があるなぁ、と思いつつ…