这个函数有问题吗,为什么这么多错误?

Dingnifei123 2009-11-10 11:23:25

//这里是头文件定义:
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 ==========
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
coxfilur_2008 2010-06-30
  • 打赏
  • 举报
回复
能不能写一个函数直接去掉这些vc不识别的字符?
Dingnifei123 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lonelyhacker 的回复:]
重新输入有时候也还是会错的。 比如说DWORD的话,如果你在当前DWORD位置重新输入一遍的话

还是同样会出错,除非你把DWORD靠到最左边,再重新缩进。。

或者把全部代码删除掉,看着网上的代码自己一个一个打上去。
[/Quote]
是照着网上代码逐个字母打上去的,
lonelyhacker 2009-11-10
  • 打赏
  • 举报
回复
重新输入有时候也还是会错的。 比如说DWORD的话,如果你在当前DWORD位置重新输入一遍的话

还是同样会出错,除非你把DWORD靠到最左边,再重新缩进。。

或者把全部代码删除掉,看着网上的代码自己一个一个打上去。
Dingnifei123 2009-11-10
  • 打赏
  • 举报
回复
没错,各位,
我是从网上找的这个函数,

但是,我已经重新用手输入了一遍,不是直接拷贝、粘贴的,
bragi523 2009-11-10
  • 打赏
  • 举报
回复
中英文标点之类的
看来是lz黏贴的代码
只能一个个改
或者从新区找一份来
lonelyhacker 2009-11-10
  • 打赏
  • 举报
回复
DWORD把他的那句语句把缩进删除掉放到最左边,然后再重新缩进。。

跟上面的一样,可能是你从网页上直接贴上去的,就有这种情况出现。

从网页贴上去的有时候int也是变成黑色,而不是蓝色。
lonelyhacker 2009-11-10
  • 打赏
  • 举报
回复
点进去,不就可以找到对应的错误吗。。再一个一个改就可以了。
ToperRay 2009-11-10
  • 打赏
  • 举报
回复
直接粘贴的网页吧???

Dingnifei123 2009-11-10
  • 打赏
  • 举报
回复
实在看不明白诸如DWORD之类的定义有什么问题,
请大家指教,多谢,

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧