2011-05-25 86 views
0

我真的一直在用VB6命名管道掙扎一段時間。 這條線到大延伸作品:當連接到命名管道時,CreateFile()返回錯誤32(SHARING_VIOLATION)

CallNamedPipe(szPipeName, Header(0), 2, bArray(0), numBytes, cbRead, 30000) 

管服務器確實接收寫入的2個字節。然而這個功能並不是我想要使用的。我需要使用CreateFile()+ WriteFile()組合。現在我無法得到這個工作:

pipeHandle = CreateFile(szPipeName, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&) 

它返回-1,意味着它失敗。沒有別的改變,所以我不明白爲什麼失敗。 然後我試圖在現有的文件C:\ test.txt的:

pipeHandle = CreateFile("C:\\test.txt", GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&) 

它仍然失敗,返回-1。

我使用CreateFile()錯誤嗎?

+0

返回的錯誤代碼是32,即ERROR_SHARING_VIOLATION。但是我沒有使用FILE_SHARE_READ和FILE_SHARE_WRITE標誌。剛纔我嘗試添加這些標誌,但它仍然給我錯誤代碼32. – Charlie 2011-05-25 07:55:05

+0

看起來沒問題。帶有磁盤文件名的磁盤可能會因錯誤2(找不到文件)而失敗。命名管道可能失敗,因爲服務器超額訂購(超過最大實例數)或沒有掛起的連接掛起。 – Bob77 2011-05-25 13:38:38

+0

@Bob,我還是卡住了。磁盤文件確實存在,但是CreateFile()確實返回-1,錯誤代碼爲32.並且命名管道確實在監聽。我的C++和C#客戶端隨時都可以愉快地連接和交談。這很神祕。 – Charlie 2011-05-26 00:15:05

回答

0

問題全部解決。 這是一個Unicode/ANSI問題。文件/管道名稱字符串未正確解析。改用CreateFileA。

相關問題