2009-05-14 14 views
2

最近、Bluetooth USBドングルを使用してシリアル通信にアクセスしようとしました。 私は以下のCコードを使用し、エラー5を取得し続けます。これは「アクセス拒否」です。私はシステムの管理者です(フォーラムでこの問題の一般的な解決策と思われました)。他のアプリケーションは私が使用している同じポートにアクセスしていません。私はWindows Vista Home Basic 32bitシステムで動作しています。誰もがこの 私のCコードのためのソリューションを持っていた場合、私は思っていたことは次のとおりです。シリアルポート通信の問題(Cコード)

HANDLE hComm; 

hComm =のCreateFile(_T()、 GENERIC_READ | GENERIC_WRITE "\\ \ COM3。" 、 0、 NULL、 、OPEN_EXISTING、 0、 NULL);

if (hComm == INVALID_HANDLE_VALUE) 
    printf("Error number: %ld\n", GetLastError()); 
else 
    printf("success\n"); 
+0

+1を正しく文字列に一定の_Tマクロの使用を示し、たとえばコードはから独立しているので、 ANSIまたはUNICODEビルドのコンパイル時の選択。 – RBerteig

+0

追加のデータポイントとして、私はCOMポートがHyperTerminalのような単純なターミナルアプリケーションによって実際にアクセス可能であることを確認することをお勧めします。それは...ですか? – Hexagon

答えて

0

ヒントありがとうございますが、Bluetoothのパスキーが正しく設定されていないため、シリアルポートへのアクセスが拒否されていました。

4

これはあなたの問題であるかどうかは分かりませんが、私はあなたがそうのように、パスにバックスラッシュをエスケープする必要がある疑いがある:私の経験で"\\\\.\\COM3"

+1

+1、これは答えだと思います。これは、Windowsがなくなるまで、Windows上のCプログラマを悩ます潜在的なバグです。 – RBerteig

+1

実際これはCOM10以降でのみ必要です。より低いCOMの場合、COM3も同様に動作します –

0

をバックスラッシュは必要ありません

hComm = CreateFile(_T("COM3"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
+1

COM1からCOM9ではバックスラッシュは必要ありません。それらはCOM10以上に必要です。 –

1

バックスラッシュをもう一度エスケープする必要があるようです。 WinObj(http://technet.microsoft.com/en-us/sysinternals/bb896657.aspx)などのオブジェクトビューアを使用して、対象とするCOMポートがシステム上に存在することを確認することもできますが、WinObjがVista上で動作するかどうかはわかりません。

0

だけで\を使用してCOM番号を交換してください。\ COM#のコードの中で、

hComm = CreateFile("\\\\.\\COM15", 

       GENERIC_READ | GENERIC_WRITE, 
       0, 
       0, 
       OPEN_EXISTING, 
       0, 
       0); 
関連する問題