//这里是头文件定义:
public:
void EnumComPort(HKEY hKey, LPCTSTR cstrKey);//这里是CPP文件函数对应:
void CTestDlg::EnumComPort(HKEY hKey, LPCTSTR cstrKey)
{
static HKEY hLastKey = hKey;
LONG lResult;
DWORD dwIndex =0;
HKEY hCurKey = hKey;
DWORD dwKeyType; 
DWORD dwKeyDataLength,dwKeyNameLen;
LPBYTE pbbinKeyData = NULL;
TCHAR *tcKeyName = NULL;
TCHAR tcDataType[1024] = _T("");
   lResult = RegOpenKeyEx(hCurKey, cstrKey, 0, KEY_QUERY_VALUE, &hKey);   
   if(lResult != ERROR_SUCCESS)
    return;
   DWORD lNoOfValues = 0; 
   DWORD lLongestKeyNameLen = 1;
   DWORD lLongestDataLen = 1;
   lResult = RegQueryInfoKey(hKey, NULL, NULL, NULL,NULL, NULL, NULL,&lNoOfValues, &lLongestKeyNameLen, &lLongestDataLen, NULL, NULL);
   if(lResult != ERROR_SUCCESS)    
    return;
hLastKey = hKey;
   lLongestKeyNameLen++;
lLongestDataLen++;    
tcKeyName = new TCHAR[lLongestKeyNameLen];
   pbbinKeyData = new BYTE[lLongestDataLen];
   CString cstrFinalData,cstrTemp;
while(TRUE)
{
memset(pbbinKeyData, 0, lLongestDataLen);
memset(tcKeyName, 0, lLongestKeyNameLen);
dwKeyType = dwKeyDataLength = dwKeyNameLen = 0;
dwKeyNameLen = lLongestKeyNameLen;
dwKeyDataLength = lLongestDataLen;
lResult = RegEnumValue(hKey, dwIndex, tcKeyName, &dwKeyNameLen, NULL, &dwKeyType, pbbinKeyData, &dwKeyDataLenght);
if(lResult == ERROR_NO_MORE_ITEMS)
break;
AddRegistryItem(tcKeyName, dwKeyType, pbbinKeyData, dwKeyDataLength, dwIndex);
dwIndex++;
}
RegCloseKey(hKey); 
delete tcKeyName;  
   delete pbbinKeyData; /*
HKEY hkey;// HKEY_LOCAL_MACHINE; char sz[256]={0}; 
    DWORD dwtype, sl = 256; 
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", NULL, KEY_ALL_ACCESS, &hkey); RegQueryValueEx(hkey, "\\Device\\Serial0", NULL, &dwtype, (LPBYTE)sz, &sl); 
RegCloseKey(hkey); 
AfxMessageBox((LPCSTR)sz);//AfxGetMainWnd()->m_hWnd,
*/
}错误如下:
1>Compiling...
1>Pre-Power TestDlg.cpp
1>d:\...testdlg.cpp(53) : error C3872: '0x3000': this character is not allowed in an identifier
1>d:\...testdlg.cpp(54) : error C2065: ' ' : undeclared identifier
1>d:\...testdlg.cpp(54) : error C2146: syntax error : missing ';' before identifier 'DWORD'
1>d:\...testdlg.cpp(54) : error C2146: syntax error : missing ';' before identifier 'dwKeyDataLength'
1>d:\...testdlg.cpp(54) : error C2275: 'DWORD' : illegal use of this type as an expression
1>        c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h(151) : see declaration of 'DWORD'
1>d:\...testdlg.cpp(54) : error C2065: 'dwKeyDataLength' : undeclared identifier
1>d:\...testdlg.cpp(54) : error C2065: 'dwKeyNameLen' : undeclared identifier
1>d:\...testdlg.cpp(58) : error C3872: '0x3000': this character is not allowed in an identifier
1>d:\...testdlg.cpp(59) : error C2143: syntax error : missing ';' before 'if'
1>d:\...testdlg.cpp(69) : error C3872: '0x3000': this character is not allowed in an identifier
1>d:\...testdlg.cpp(70) : error C2146: syntax error : missing ';' before identifier 'tcKeyName'
1>d:\...testdlg.cpp(80) : error C2065: 'dwKeyDataLenght' : undeclared identifier
1>d:\...testdlg.cpp(83) : error C3861: 'AddRegistryItem': identifier not found
1>d:\...testdlg.cpp(88) : error C3872: '0x3000': this character is not allowed in an identifier
1>d:\...testdlg.cpp(88) : error C2065: ' delete' : undeclared identifier
1>d:\...testdlg.cpp(88) : error C2146: syntax error : missing ';' before identifier 'pbbinKeyData'
1>d:\...testdlg.cpp(332) : error C2660: 'CTestDlg::EnumComPort' : function does not take 0 arguments
1>Build log was saved at "file://d:\...Test\Debug\BuildLog.htm"
1>Test - 17 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

解决方案 »

  1.   

    实在看不明白诸如DWORD之类的定义有什么问题,
    请大家指教,多谢,
      

  2.   

    DWORD把他的那句语句把缩进删除掉放到最左边,然后再重新缩进。。 跟上面的一样,可能是你从网页上直接贴上去的,就有这种情况出现。 从网页贴上去的有时候int也是变成黑色,而不是蓝色。
      

  3.   

    重新输入有时候也还是会错的。 比如说DWORD的话,如果你在当前DWORD位置重新输入一遍的话还是同样会出错,除非你把DWORD靠到最左边,再重新缩进。。或者把全部代码删除掉,看着网上的代码自己一个一个打上去。