2017-08-25 21 views
0

我想調試一個在VC++中使用MSVS 2008構建的DLL。我選擇使用CLR(公共語言運行時?),所以我可以利用System :: Net :: Socket API。該API似乎工作正常,但是,我的DLL函數之一需要比較來自套接字的字節與文字字符串「ON」:爲什麼MSVS 2008 VC++項目給出錯誤:當我比較兩個System :: String對象時,quickwatch窗口中的關係運算符失敗

我安排通過套接字發送一些匹配的字節,但比較總是失敗。我最終能夠通過MSVS調試器遍歷代碼,並且我可以看到套接字字節被轉換爲與我使用的字面值字符串(「ON:」)匹配的字符串,但是由於某些原因,相等比較是總是失敗(見下面的代碼)。我一直能從調試器中收集到的唯一真實線索是當我試圖觀察比較表達式(str ==「ON:」)時,我在'value 「快速監視窗口的領域:

‘關係運算符失敗’

我不知道這意味着什麼,(超出了明顯的==工作不正常),並一直無法跟蹤錯誤信息到任何地方在線或以其他方式。下面我將列出一些關於我的MSVS解決方案配置以及我遇到的代碼片段的其他事實,以防萬一任何明智的MSVS C++人員看到我的方式錯誤... :)

謝謝提前:

MSVS解決方案包含兩個項目,一個是調用DLL的可執行文件和一個DLL本身。

可執行項目是本機代碼,DLL項目是CLR(託管代碼?)。

兩個項目都使用多字節字符集(ie..not Unicode)的

下面是我在調試程序時遇到此錯誤檢查代碼片段:

DWORD Get_Status() {  
    array<Byte>^ RecvBytes = gcnew array<Byte>(256);   
    array<Byte>^ SendBytes = Encoding::ASCII->GetBytes("CHECK_STATUS"); 
    GO::lsock->Send(SendBytes); 
    if (GO::lsock->Receive(RecvBytes, GO::lsock->Available, SocketFlags::None)) {   
     System::String^ str = Encoding::ASCII->GetString(RecvBytes);    
     return (str == "ON:") ? 0x1008 : 0; //this always returns 0 at runtime and returns the aforementioned error in the debugger watch window, error: relational operator failure 
    } 
    return 0;    
} 
+0

Visual Studio 2008?獲取新版本!已經有VS 2010,2012,2013,2015和2017,所以你有六(!)個版本。 – Sjoerd

+0

:)的確,可以使用新版本,但是這個東西是在獨立的機器上,需要太多的箍更新....我打算在某個時間點追求新版本,但仍然很難相信String平等檢測是2008年後添加的新功能? :) – Travis

+0

這可能是重複的https://stackoverflow.com/questions/1788702/visual-studio-fails-to-display-some-watched-expressions?如果是這樣,請在那裏查看答案。 – Sjoerd

回答

0

插入空格後開:它可能工作。

我個人更喜歡與便攜性原因的數據流處理時,C標準庫(libc)一起使用原始插座的send()/的recv()

#include <winsock.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
相關問題