none
COM串口拒绝访问 RRS feed

  • 问题

  • ATL开发的COM可执行(.exe)模块中, 用如下代码打开COM口:

     HANDLE hCom = CreateFile(_T("COM7"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

    * App1 通过该COM模块访问串口, 关闭App释放COM对象后, COM模块进程自动退出.

    反复启动App1(打开串口), 关闭App(关闭串口), 会经常出现打开失败(成功次数较少,失败次数较多):

      - hCom==INVALID_HANDLE_VALUE, GetLastError() == 5 (ERROR_ACCESS_DENIED)

    但将上边的代码直接放到App2中, 则不会出现打开失败的情况. 在启动App1打开COM口失败的情况下, 启动App2却能正常打开该COM口.

    请问哪位遇到过类似情况, 是如何解决的?

    2020年5月7日 8:16

全部回复

  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>COM串口拒绝访问

    使用CreateFile会在使用模块时打开COM端口,但是关闭模块时并不一定会关闭COM端口,这样就导致开关程序时COM端口已经被占用,出现异常:“对端口的访问被拒绝”。

    我们需要在程序关闭前或是串口使用完毕后关闭串口,只需要使用CloseHandle()函数即可。将CreateFile返回的句柄作为参数调用就可以使串口正常关闭。

    Best Regards,

    Jeanine Zhang

    2020年5月8日 7:14
    版主