CreateNamedPipeが必ずエラー

解決


taka  2009-04-22 23:01:10  No: 70036

はじめまして、いつも参考にさせていただいています。

今回CreateNamedPipeを利用してプロセス間通信を行おうと思うのですが
戻り値が必ず-1がかえってきます。

GetLasterrにてエラーコードを取得すると、0x7B
”ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません。”との事です。

何か特殊な前処理とかが必要なのでしょうか?
もしくは何かリンクが必要?コンパイラの設定??

何方かご教授ください。

BCBでは同様の記述でうまくいきます。

以下抜粋
    OpenMode = PIPE_ACCESS_INBOUND;
    PipeMode = PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT;

    hand = CreateNamedPipe( (LPCTSTR)"\\\\.\\pipe\\ABCD", OpenMode, PipeMode,
                    PIPE_UNLIMITED_INSTANCES, 16384,
                    16384, 1000, NULL );

環境はXP Pro VS2005 C++コンソールアプリです。


επιστημη  URL  2009-04-22 23:40:05  No: 70037

毎度おなじみ"文字コード問題"ですかねぇ。

CreateNamedPipe( _T("\\\\.\\pipe\\ABCD"),... とか
CreateNamedPipe( TEXT("\\\\.\\pipe\\ABCD"),... とか
CreateNamedPipe( L"\\\\.\\pipe\\ABCD",... とかだとどうなります?


仲澤@失業者  2009-04-23 00:13:42  No: 70038

文字コードの問題なら
CreateNamedPipeA(( LPCSTR)...);
CreateNamedPipeW(( LPCWTR)...);

もありかなも、めんどいときは文字列の型により
〜A系、〜W系を指名してますです・・・混載しても動くし(笑)。


taka  2009-04-23 00:27:41  No: 70039

早速の返答ありがとうございます。

Unicode変換が必要だったのですね・・・
文字列だけではコンパイルエラーでLPCWSTR型を入れろと怒られていましたので、widecharでユニコード対応なんだなぁと思っていました。

ちなみに、LPCWSTRへキャストしても同様に-1が返却されますが・・・

επιστημηさま記述三タイプはすべてOKです。

επιστημηさま
仲澤@失業者さま

大変お世話になりました。良い勉強になりました。


επιστημη  URL  2009-04-23 00:42:25  No: 70040

> ちなみに、LPCWSTRへキャストしても同様に-1が返却されますが・・・

そりゃそーでしょ。
りんごにマジックで「みかん」て書いたらみかんになります?
キャストってば基本そーゆーことだから。


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

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






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