ハンドルの確認で「宣言が正しく終了していない」 – プログラミング – Home

ハンドルの確認で「宣言が正しく終了して...
 
通知
すべてクリア

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


ritz
 ritz
(@ritz)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

名前付きパイプを作り、そこに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
 ax
(@ax)
ゲスト
結合: 22年前
投稿: 10
 

上記の処理は関数内に書いていますか?


返信引用
ritz
 ritz
(@ritz)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

axさん、レスありがとうございます。

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

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


返信引用
ritz
 ritz
(@ritz)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

失礼しました!!

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

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

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

こんにちは、RAPTです。

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

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

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


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

>CPPでmain()はないかと。WinMain()でしょう。

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


返信引用
ritz
 ritz
(@ritz)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

島さん、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
 ritz
(@ritz)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

すみません、分かりました。
ShellExecute() ですね。

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

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

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

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

ちなみに、CreateProcess()というのもあります。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました