未找到com0com虚拟端口

rav*_*int 12 winapi com0com

我已经在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
Run Code Online (Sandbox Code Playgroud)

注意:记录为"正在使用"不是错误消息?

然后我尝试像这样打开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);
Run Code Online (Sandbox Code Playgroud)

这失败了

Error creating connection COM8 ( COM8 ) The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

我试过"COM8"和"\\.\COM8".

请注意,对CreateFileA的完全相同的调用在"真正的"COM端口上完美地工作.

问:有人可以告诉我问题是什么吗?

答:在Windows 7 64位上,您必须启用未签名驱动程序的测试.

  • 以管理员身份运行命令提示符.(仅从具有管理员权限的帐户运行是不够的.请参阅此处了解如何执行此操作的详细信息.)

  • 输入命令 bcdedit -set TESTSIGNING ON

  • 重启.(Windows将在桌面右下角放置"测试模式"注释)

对于Windows 8,此方法无法令人满意或轻松地工作.以下是对问题和解决方法的一些讨论.

或者你可能想尝试签名版本 - 我自己没试过.

hat*_*ica 18

如果有人引用此内容并对此主题感兴趣,则com0com的2.2.2.0版本将针对64位Windows进行签名.这消除了跳过将Windows置于"测试"模式的环节的需要.

  • 3.0.0.0版**在Windows 7 64Bit上************.2.2.2.0完美运作. (2认同)

men*_*raz 9

以下是我的观点:

  • 微软要求64-bit driverssigned.
  • com0com.sys(64位)只是一个未签名的内核模式驱动程序.

SoftWx编写了一个有趣的教程,将其安装在64位Windows 7机器上.你可以在这里获取它.