用VC怎么才能获得电脑的串口有哪些呢??? 是要和硬件打交道的吧,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=195079 我已经试过了,不过有些问题。请帮忙,谢谢,挺急的。/* -------- 从注册表里搜寻安装的串口 -----------------------Win2k/XP和Win98/Me的注册表值不同,所以用枚举把串口名字写入一个ComboBox控件里*/void FindCommPort(CComboBox *pComboBox){ HKEY hKey; #ifdef _DEBUG ASSERT( pComboBox != NULL ); pComboBox->AssertValid(); #endif if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", NULL, KEY_READ, &hKey) == ERROR_SUCCESS) // 打开串口注册表 { int i=0; char portName[256],commName[256]; DWORD dwLong,dwSize; while(1) { dwLong = dwSize = sizeof(portName); if( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize ) == ERROR_NO_MORE_ITEMS ) // 枚举串口 break; pComboBox->AddString( commName ); // commName就是串口名字 i++; } if( pComboBox->GetCount() == 0 ) { ::AfxMessageBox( "在HKEY_LOCAL_MACHINE:Hardware\\DeviceMap\\SerialComm里找不到串口!!!" ); } RegCloseKey(hKey); }}在调用此函数的时候,我是这么写的,可是总是不通过,如下:CComboBox* pComboBox=(CComboBox*)GetDlgItem(COMBO_INTEL_COMID); FindCommPort(pComboBox);以下为出错信息:YJTX_Para_Set_Dlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall CYJTX_Para_Set_Dlg::FindCommPort(class CComboBox *)" (?FindCommPort@CYJTX_Para_Set_Dlg@@QAEXPAVCComboBox@@@Z)Debug/Terminal.exe : fatal error LNK1120: 1 unresolved externalsError executing link.exe.Terminal.exe - 2 error(s), 4 warning(s) clean , rebuild all?//我运行这段程序正确 void CEmulateComPortDlg::EmultateCom(){ CString strCom; int nCom = 0; int count = 0; HANDLE hCom; do { nCom++; strCom.Format("COM%d", nCom); hCom = CreateFile(strCom, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(INVALID_HANDLE_VALUE == hCom ) break; m_cbCom.AddString(strCom); CloseHandle(hCom); } while(1);} 代码没有问题,FindCommPort定义的问题 MFC应用程序能想引入resX的资源么?该怎么办? 怎么设置CCombBox的缺省值? 内存回收问题!!! 求简单图象处理示例,很简单的. 请问如何选中IE中一个列表的某一项呢。 枚举我的电脑内所有的文件夹 萝卜白菜,各有所爱 n个数排序,最坏情况下的最小交换次数是多少呢? 进程管理是怎么做出来的? 一个简单的问题,请各位大侠帮帮忙啊! SDK 方式 使用CSliderCtrl 类 hash_map in vs2005
/* -------- 从注册表里搜寻安装的串口 -----------------------
Win2k/XP和Win98/Me的注册表值不同,所以用枚举
把串口名字写入一个ComboBox控件里
*/
void FindCommPort(CComboBox *pComboBox)
{
HKEY hKey; #ifdef _DEBUG
ASSERT( pComboBox != NULL );
pComboBox->AssertValid();
#endif if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"Hardware\\DeviceMap\\SerialComm",
NULL,
KEY_READ,
&hKey) == ERROR_SUCCESS) // 打开串口注册表
{
int i=0;
char portName[256],commName[256];
DWORD dwLong,dwSize; while(1)
{
dwLong = dwSize = sizeof(portName);
if( ::RegEnumValue( hKey,
i,
portName,
&dwLong,
NULL,
NULL,
(PUCHAR)commName,
&dwSize ) == ERROR_NO_MORE_ITEMS ) // 枚举串口
break; pComboBox->AddString( commName ); // commName就是串口名字
i++;
} if( pComboBox->GetCount() == 0 )
{
::AfxMessageBox( "在HKEY_LOCAL_MACHINE:Hardware\\DeviceMap\\SerialComm里找不到串口!!!" );
}
RegCloseKey(hKey);
}
}在调用此函数的时候,我是这么写的,可是总是不通过,如下:CComboBox* pComboBox=(CComboBox*)GetDlgItem(COMBO_INTEL_COMID);
FindCommPort(pComboBox);以下为出错信息:YJTX_Para_Set_Dlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall CYJTX_Para_Set_Dlg::FindCommPort(class CComboBox *)" (?FindCommPort@CYJTX_Para_Set_Dlg@@QAEXPAVCComboBox@@@Z)
Debug/Terminal.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.Terminal.exe - 2 error(s), 4 warning(s)
//我运行这段程序正确
{
CString strCom;
int nCom = 0;
int count = 0;
HANDLE hCom;
do {
nCom++;
strCom.Format("COM%d", nCom);
hCom = CreateFile(strCom, 0, 0, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(INVALID_HANDLE_VALUE == hCom )
break;
m_cbCom.AddString(strCom);
CloseHandle(hCom);
} while(1);
}