我已在64位Windows 7机器上安装了com0com v2.2.2.0,显然已成功。com0com虚拟端口未找到
我运行命令行工具,就像这样:
command> install PortName=COM9 PortName=COM8
CNCA0 PortName=COM9
CNCB0 PortName=COM8
ComDB: COM8 - logged as "in use"
ComDB: COM9 - logged as "in use"
command> busynames COM?*
COM3
COM4
COM5
COM6
COM8
COM9
COMPOSITEBATTERY
注:记录为“使用中”是不是一个错误的信息?
然后我尝试打开COM8这样
m_hIDComDev = CreateFileA(szCodedPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
if(m_hIDComDev == NULL || m_hIDComDev == INVALID_HANDLE_VALUE) {
wchar_t * lpMsgBuf;
DWORD dw = ::GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL);
myErrorMsg = (char*)malloc(200);
sprintf(myErrorMsg,"Error creating connection %s (%s) %S",
szPort,szCodedPort,lpMsgBuf);
这种失败
Error creating connection COM8 (COM8) The system cannot find the file specified.
我曾经尝试都 “COM8” 和"\\.\COM8"
。
请注意,与CreateFileA完全相同的调用在“真实”COM端口上完美工作。
问:有人能告诉我问题是什么吗?
答:在Windows 7 64位上,您必须启用对未签名驱动程序的测试。
运行命令提示符管理员。 (这是不够只是为了与管理员权限的帐户运行。对于如何做到这一点的详细信息,请参阅here。)
键入命令
bcdedit -set TESTSIGNING ON
重启。 (Windows将在桌面右下角放置一个“测试模式”注释)
对于Windows 8,此方法无法令人满意或轻松使用。这里是some discussion的问题和解决方法。
另外,你可能想尝试signed version - 我没有尝试过这个我自己。
这表明'COM8 - 记录为“使用”' - 这可能是你的问题。 – 2012-01-07 20:36:05
@Jonathon莱因哈特你熟悉com0com? “使用中”的消息,根据文件中的提示,意味着只有这些COM端口已被com0com驱动程序分配的,因此将不会被再次分配。如果操作系统认为他们很忙,它会给我一个不同的错误。据我所知! – ravenspoint 2012-01-07 22:40:52
“使用中”通常是错误消息。很高兴看到开放源代码,你可以阅读代码,看看它实际上应该是什么意思。 – 2012-01-07 22:51:16