【发布时间】:2012-01-07 20:28:18
【问题描述】:
我已经在 64 位 Windows 7 机器上安装了 com0com v2.2.2.0,显然是成功的。
我运行命令实用程序,如下所示:
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 - logged as "in use"- 这可能是您的问题。 -
@Jonathon Reinhart 你熟悉 com0com 吗?根据文档中的提示,“正在使用”消息仅表示这些 COM 端口已由 com0com 驱动程序分配,因此不会再次分配。如果操作系统认为他们很忙,它会给我一个不同的错误。哎呀!
-
“正在使用”通常是一条错误消息。开源很好,您可以阅读代码以了解它的实际含义。
-
是的,我使用过 com0com,但使用 C# 访问它。抱歉,我无法提供更多帮助。
-
@Hans Passant 好的,是什么导致了错误?