我在一台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"
。
请注意,在“真实”的COM端口上,完全相同的CreateFileA调用可以正常工作。
Q:有人能告诉我问题出在哪里吗?
A:在Windows 7 64位上,您必须启用未签名驱动程序的测试。
以管理员身份运行命令提示符。(仅以具有管理员权限的账户运行是不足够的。有关如何执行此操作的详细信息,请参见此处。)
输入以下命令:
bcdedit -set TESTSIGNING ON
重新启动。(Windows会在桌面右下角放置一个“测试模式”注释)
对于Windows 8,此方法效果不佳或难以使用。 这里讨论了相关问题和解决方法。
或者您可能想尝试签名版本 - 我自己没有尝试过。
COM8 - 已登录为"in use"
- 这很可能是您的问题。 - Jonathon ReinhartCreateFile
函数的 ANSI 版本?Hans 建议你查看 com0com 项目的源代码,以了解你收到的错误消息的含义。如果像你所说的那样,调用CreateFile
函数可以在“真实”的 COM 端口上工作,那么问题显然就出在那里。 - Cody Gray