VC6.0中MFC编写的串口程序XP上运行正常,win7中无法获得串口,求指导~

leo_522105633 2012-07-16 10:00:18
如题。VC6.0中MFC编写的串口程序XP上运行正常,win7中运行无法获得串口,求指导

win7中运行,显示串口的下拉菜单里什么都没有。
...全文
1574 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
drlsdrls 2013-12-12
  • 打赏
  • 举报
回复
引用 22 楼 zhangshuqiang123 的回复:
[quote=引用 18 楼 diplopod 的回复:] Win7下读注册表好像是不需要管理员权限的。 RegKey.Open()设定为以读方式打开, 默认是读写方式打开的。 改成这样试一下 f(RegKey.Open(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", KEY_READ) == ERROR_SUCCESS) 机器是XP系统, 这边没办法试, 楼主自己试一下了。
我试了一下,按照你这个方法,可以遍历获取端口号了,谢谢。[/quote] 你win7注册表里HKEY_LOCAL_MACHINE\\Hardware\\DeviceMap下面有SerialComm这个key吗?为什么我的没有
zhangshuqiang123 2013-05-30
  • 打赏
  • 举报
回复
引用 18 楼 diplopod 的回复:
Win7下读注册表好像是不需要管理员权限的。 RegKey.Open()设定为以读方式打开, 默认是读写方式打开的。 改成这样试一下 f(RegKey.Open(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", KEY_READ) == ERROR_SUCCESS) 机器是XP系统, 这边没办法试, 楼主自己试一下了。
我试了一下,按照你这个方法,可以遍历获取端口号了,谢谢。
zhangshuqiang123 2013-05-30
  • 打赏
  • 举报
回复
楼主,你这问题,解决了吗?我也遇到同样的问题了
  • 打赏
  • 举报
回复
静态编译有试过吗
躺着睡的蜗牛 2013-05-02
  • 打赏
  • 举报
回复
自己弄不操作注册表的的枚举串口的方法: BOOL CMyComm::CheckPort(int iComPort) { BOOL bResult = FALSE; TCHAR csCom[10]; DWORD dwError = 0; swprintf(csCom, _T("COM%d"), iComPort); m_hCom = CreateFile(csCom,GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL ); if(m_hCom != INVALID_HANDLE_VALUE) { // handle error bResult = TRUE; } dwError = GetLastError(); if(dwError != ERROR_FILE_NOT_FOUND) { bResult = TRUE; } CloseHandle( m_hCom ); return bResult; }
躺着睡的蜗牛 2013-05-02
  • 打赏
  • 举报
回复
Win7下读注册表好像是不需要管理员权限的。 RegKey.Open()设定为以读方式打开, 默认是读写方式打开的。 改成这样试一下 f(RegKey.Open(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", KEY_READ) == ERROR_SUCCESS) 机器是XP系统, 这边没办法试, 楼主自己试一下了。
voice2007 2013-05-02
  • 打赏
  • 举报
回复
遇到了类似的问题: 在XP系统下,用VC6.0的MFC串口编程,可以正常收发数据。 将该程序编译后的RELEASE版,复制到WIN7系统下,程序可以打开,但是串口无法接收和发送数据。同时,在WIN7系统下,用串口助手可以正常接收和发送数据 请问是何原因?如何解决? 谢谢
C_S_D_N_MVP 2012-07-19
  • 打赏
  • 举报
回复
右键单击-》以管理员身份运行
leo_522105633 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你只能到WIN7环境下去重新编译一个,就能在WIN7用了
[/Quote]
我在win7上重新编译过了。也不行。。。
这个娜戒海了 2012-07-16
  • 打赏
  • 举报
回复
你只能到WIN7环境下去重新编译一个,就能在WIN7用了
leo_522105633 2012-07-16
  • 打赏
  • 举报
回复
有解决方法吗?
这个娜戒海了 2012-07-16
  • 打赏
  • 举报
回复
我百度了一下,貌似SHELL32.dll这个东西XP和WIN7不通用,也就是XP下跑的不一定能拿到WIN7跑,应该是这个问题吧
leo_522105633 2012-07-16
  • 打赏
  • 举报
回复
代码过长。下面的部分是我做的获取串口和IP的代码。求指正。谢谢~

BOOL CWsnleo_MonitorDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

//获取系统中的串口个数
CString pNameList[10];
CString pPortList[10];
int SerialCount=GetSystemPorts(pNameList,pPortList);
//向Combo Box中添加串口个数
for(int j=0;j<SerialCount;j++)
{
((CComboBox*)GetDlgItem(IDC_COMBOPORT))->AddString(pPortList[j]);
PortTab[j] = pPortList[j].GetAt(3)-0x30;
}

m_ComSel.SetCurSel(0); //设定初始选择com口

GetDlgItem(IDC_BTNCLOSE)->EnableWindow(FALSE);

GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);
GetDlgItem(IDC_BTNAUTOUPLOAD)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);

//获取本机Ip地址
OnIPAddress();
//m_IPAddress.SetAddress(10,121,11,111);
m_IPAddress.SetWindowText(IpAddr); // 把IP地址(CString类型)直接显示到IP Address控件中


return TRUE; // return TRUE unless you set the focus to a control
}
这个娜戒海了 2012-07-16
  • 打赏
  • 举报
回复
是不是跑的release版
代码贴来看看呢
franzhong 2012-07-16
  • 打赏
  • 举报
回复
缺少个dll?
leo_522105633 2012-07-16
  • 打赏
  • 举报
回复
而且有一个警告warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF
不知道是不是这个警告的问题
这个娜戒海了 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 10 楼 的回复:

关闭windbg7 UAC

如何关闭关闭windbg7 UAC。能具体一点吗?谢谢~
[/Quote]

就是WIN7的用户管理控制,百度一下,很多的
leo_522105633 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

关闭windbg7 UAC
[/Quote]
如何关闭关闭windbg7 UAC。能具体一点吗?谢谢~
leo_522105633 2012-07-16
  • 打赏
  • 举报
回复
遍历注册列表获取串口
int CWsnleo_MonitorDlg::GetSystemPorts(CString *pNameList, CString *pPortList)
{
CRegKey RegKey;
int nCount = 0;
//打开注册表
if(RegKey.Open(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm") == ERROR_SUCCESS)
{
while(true)
{
char ValueName[_MAX_PATH];
unsigned char ValueData[_MAX_PATH];
DWORD nValueSize = _MAX_PATH;
DWORD nDataSize = _MAX_PATH;
DWORD nType;

//通过枚举获取,如果再无其他项则终止

if(::RegEnumValue(HKEY(RegKey), nCount, ValueName, &nValueSize, NULL, &nType, ValueData, &nDataSize) == ERROR_NO_MORE_ITEMS)
{
break;
}

//如果又找到一个

if(pNameList) //名称
pNameList[nCount] = ValueName;

if(pPortList) //值
pPortList[nCount] = ValueData;

nCount++; //继续探索下一个
}
}

return nCount;

}
一条晚起的虫 2012-07-16
  • 打赏
  • 举报
回复
// 查一下 GetSystemPorts(),这个函数是怎么写的?
加载更多回复(3)
《企业级 VMware vSphere 6.7虚拟化技术配置与管理》课程共分为“上集”和“下集”两部分,本套视频为“上集”部分,从零基础讲起,由浅入深,是虚拟化入门与提高学习推荐课程。 通过本课程学习,可以全面、深入、系统掌握vSphere产品的规划、设计、安装、配置、管理等相关技能。结合课程实战,深入理解软件定义计算、存储、网络相关概念和运维技能。 《企业级 VMware vSphere虚拟化技术配置与管理》上集部分具体课程章节如下。 第1章 《vSphere技术基础》主要内容本章我们从理论上描述了虚拟化技术。第一部分重点讲解了什么是虚拟化技术;什么是vSphere。第二部分重点讲解了vSphere的设计思想,从虚拟化层、管理层、接口层进一步展开分析,使从业学习人员从技术层面对VMware vSphere进行深层次学习。 第2章 《VMware ESXi 安装和设置》主要内容本章我们重点讲解了两部分内容,第一部分主要讲解了安装ESXi程序的准备工作及安装过程。第二部分主要讲解了ESXi服务器的基本设置。这些内容是成为VMware工程师的必备技能,也是基础要,希望各位朋友认真学习,踏实实践。 第3章 《vSphere Host Client管理单台ESXi主机》主要内容本章我们主要讲解了通过vSphere Host Client管理单台ESXi主机相关技能。包括vSphere Host Client的版本情况,基本理论知识;结合理论知识,重点给大家演示了使用vSphere Host Client对ESXi主机进行管理、对虚拟机进行管理、对网络进行管理、对存储进行管理等内容。操作内容比较多,希望朋友们认真理解理论知识的同时,踏实做好每一个实验,用实验检验理论,通过理论指导实践。 第4章 《vCenter Server 安装和设置》主要内容本章我们从理论上讲解了vCenter Server的安装类型、安装要、安装分类、安装涉及到的组件和服务。在理论的基础上,我们分类分步进行了各种模型的构建,这些构建模型包括:* Windows环境部署具有嵌入式PSC的vCenter Server;* Windows环境部署具有外部PSC和外部SQL Server数据库的vCenter Server;* Linux环境部署具有嵌入式PSC的VCSA;* Linux环境部署具有外部PSC的VCSA。本章内容理论丰富,实验详细。希望朋友们认真学习理论说明,跟做章节涉及的每一个实验,边看边做边总结。最终能够形成自己的知识。注释:PSC:亦指Platform Services ControllerVCSA:亦指vCenter Server Appliance 第5章 《vCenter Server基本配置和主机管理》 主要内容本章我们从理论上讲解了vSphere在数据心的物理结构、软件组件、客户端使用界面、受管清单对象、可选vCenter Server组件和vCenter Server插件。在理论的基础上,详细介绍了vSphere Client的基本使用,包括对vCneter Server的管理操作、常规配置、高级属性定义、群集对象操作、vSphere标记和属性等。 第6章 《VMware vSphere 6.7 网络配置与管理》 主要内容软件定义网络,是虚拟化技术的重要知识点。本章我们主要讲解了VMware vSphere网络的配置与管理。通过大量的理论和图例详细阐述了虚拟化环境的网络模型和工作流程。课程,我们对VMware vSphere虚拟化环境的标准交换机和分布式交换机进行了分类讲解,并详细演示了涉及到的每一个实验。虽然理论和实践都做了比较详尽讲解,但对于初学者仍有一点的难度。克服困难的最好方式就是多做实验,验证理论。可谓实验三遍,其义自见。 第7章 《VMware vSphere 6.7 存储配置与管理》 主要内容本章我们通过理论结合实践的方式讲解了 VMware ESXi和 VMware vCenter Server提供的虚拟化和软件定义的存储技术。这些技术细节包括:将ESXi与iSCSI SAN配合使用;为VMware ESXi配置iSCSI共享存储;管理虚拟化环境的存储设备;使用虚拟闪存读取缓存;在虚拟化环境使用数据存储;虚拟化环境的多路径和故障切换技术;裸设备映射技术;存储置备和空间回收技术;管理存储I/O资源。大家在学习过程,可以以此为参考,构建自己的环境,逐步熟练课程的术语和操作技能。 第8章 《VMware vSphere 6.7 虚拟机配置与管理》 主要内容本章我们对VMware vSphere 环境部署虚拟机、部署 OVF 和 OVA 模板、使用内容库、配置虚拟机硬件、配置虚拟机选项、使用 vSphere vApp 管理多层应用程序、编辑虚拟机启动和关机设置等做了全面介绍。希望大家在掌握理论的基础上,参照课程实践部分,独立完成各个实验操作。 后续:在理论知识扎实,实践操作到位的情况下,《企业级 VMware vSphere虚拟化技术配置与管理》下集将深入讲解vSphere环境下的vMotion、DRS、High Available(HA)、fault tolerance(FT)、性能监控、安全备份等高可用性内容,敬请学习提高。 企业级 VMware vSphere 6.7虚拟化技术配置与管理(上集)视频课程:https://edu.csdn.net/course/detail/35162企业级 VMware vSphere 6.7虚拟化技术配置与管理(下集)视频课程:https://edu.csdn.net/course/detail/35171

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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