最近学习使用MSCOMM控件编写一个简单的串口收发程序,基本功能已经基本实现,但是在我选择已经被占用的串口时,系统会自动弹出“port already open”的提示,虽然会有提示,但是总是让人很不爽,想自己捕捉到这个错误进行处理。
找了好多资料,搜遍了GOOGLE都没有找到解决方法,后来只要自己解决了。
我发现MSCOMM控件的方法都调用InvokeHelper()函数进行处理,于是我在网上搜索InvokeHelper()抛出的异常,还真找到了。
“这个函数将参数转换为VARIANTARG值,然后对OLE控件调用IDispatch::Invoke方法。如果对IDispatch::Invoke的调用失败,这个函数将抛出一个异常。如果IDispatch::Invoke返回的SCODE(状态码)是DISP_E_EXCEPTION,则这个函数抛出一个COleException对象;否则它抛出一个COleDispatchException对象。"
所以我使用TRY...CATCH...模块捕捉了COleDispatchException错误,终于实现了捕捉这个错误。
代码如下:
1 TRY 2 { 3 //TODO 要捕捉的语句 4 } 5 CATCH(COleDispatchException, e) 6 { 7 MessageBox(""); 8 } 9 END_CATCH