两个库都有MD5.h,重定义或无法解析的外部符号,得删除一个。获取串口列表,自动获取串口号

两个库都有MD5.h,重定义或无法解析的外部符号,得删除一个。 

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2001    无法解析的外部符号 _md5_starts    AppManage    D:\010F200\svn\ProduceToolMfc\AppManage\ScanLicenceInfoUpload\x509parse.obj    1    
错误    LNK2001    无法解析的外部符号 _md5    AppManage    D:\010F200\svn\ProduceToolMfc\AppManage\ScanLicenceInfoUpload\x509parse.obj    1    
错误    LNK2001    无法解析的外部符号 _md5_finish    AppManage    D:\010F200\svn\ProduceToolMfc\AppManage\ScanLicenceInfoUpload\x509parse.obj    1    
错误    LNK2001    无法解析的外部符号 _md5_update    AppManage    D:\010F200\svn\ProduceToolMfc\AppManage\ScanLicenceInfoUpload\x509parse.obj    1    
错误    LNK1120    4 个无法解析的外部命令    AppManage    D:\010F200\svn\ProduceToolMfc\AppManage\Release\AppManage.exe    1    
 

"PWSTR" 类型的实参与 "PSTR" 类型的形参不兼容,为了显示中文直接函数后加W 。

获取串口列表,自动获取串口号

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <Windows.h>
#include <setupapi.h>
#pragma comment(lib, "setupapi.lib")
char * wideCharToMultiByte(wchar_t* pWCStrKey)
{
	//第一次调用确认转换后单字节字符串的长度,用于开辟空间
	int pSize = WideCharToMultiByte(CP_OEMCP, 0, pWCStrKey, wcslen(pWCStrKey), NULL, 0, NULL, NULL);
	char* pCStrKey = new char[pSize + 1];
	//第二次调用将双字节字符串转换成单字节字符串
	WideCharToMultiByte(CP_OEMCP, 0, pWCStrKey, wcslen(pWCStrKey), pCStrKey, pSize, NULL, NULL);
	pCStrKey[pSize] = '\0';
	return pCStrKey;

	//如果想要转换成string,直接赋值即可
	//string pKey = pCStrKey;
	//return pKey;

}
//获取特定串口号 示例Qualcomm HS-USB Diagnostics 9091 (COM20)
string getSpecialComNum(const char *in)
{
	char out[100] = { 0 };
	sscanf_s(in, "Qualcomm HS-USB Diagnostics 9091 (COM%[0-9])", out, sizeof(out)); //不是%d哦
	return out;
}
//从设备信息中 获取特定串口号  @return <=0无效
int  getSpecialComNumFromDevInfo()
{
	HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
	if (hDevInfo == INVALID_HANDLE_VALUE)
	{
		printf("SetupDiGetClassDevs Err:%d", GetLastError());
		return -2;
	};

	SP_CLASSIMAGELIST_DATA _spImageData = { 0 };
	_spImageData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA);
	SetupDiGetClassImageList(&_spImageData);

	SP_DEVINFO_DATA spDevInfoData = { 0 };
	spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
	for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
	{
		char  szBuf[MAX_PATH] = { 0 };
		int  wImageIdx = 0;
		short  wItem = 0;
		if (!SetupDiGetDeviceRegistryPropertyA(hDevInfo, &spDevInfoData, SPDRP_CLASS, NULL, (PBYTE)szBuf, MAX_PATH, 0))
		{
			continue;
		};
		if (strcmp(szBuf, "Ports") != 0) //只取端口
		{
			continue;
		}
		printf("Class1:%s\r\n", szBuf);
		if (SetupDiGetClassImageIndex(&_spImageData, &spDevInfoData.ClassGuid, &wImageIdx))
		{
			char  szName[MAX_PATH] = { 0 };
			DWORD  dwRequireSize;

			if (!SetupDiGetClassDescriptionW(&spDevInfoData.ClassGuid, (PWSTR)szBuf, MAX_PATH, &dwRequireSize))
			{
				continue;
			};
			wprintf(L"Class:%s\r\n", szBuf);

			if (SetupDiGetDeviceRegistryPropertyW(hDevInfo, &spDevInfoData, SPDRP_FRIENDLYNAME, NULL, (PBYTE)szName, MAX_PATH - 1, 0))
			{
				wprintf(L"FriendlyName:%s\r\n\r\n", szName);
				int comNum = atoi(getSpecialComNum(wideCharToMultiByte((wchar_t *)szName)).c_str());
				if (comNum > 0)
				{
					return comNum;
				}
			}
			else  if (SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szName, MAX_PATH - 1, 0))
			{
				wprintf(L"Device:%s\r\n\r\n", szName);
			}
		}
	}
	SetupDiDestroyClassImageList(&_spImageData);
	return -1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值