1
3
最可靠的C++方法是在这里使用宏。我准备接受投反对票,但是我们已经使用这个解决方案很多年了,到目前为止还没有看到任何严重的问题。
定义用于清除的“begin method”宏
是的,那个 doesn't look good at all 但至少它是实现您想要的目标的可靠且符合标准的方法。 |
2
3
这里没有快乐的答案。允许C++或SEH异常终止COM方法是非法的。你 必须 捕获它们并将其转换为适当的hresult。coclass必须实现isupportserrorinfo和ierrorinfo接口,以便客户机能够获取异常信息。clr将很容易地这样做以生成定制的异常消息。 您所说的error()方法很可能是ATL CComCoClass::Error() method . 它设置IErrorInfo将返回的异常信息。 没有机制注入单个try/catch块来捕获所有可能的异常,直接从客户端调用COM方法。对于每个调用调用异常的C++代码的COM方法,您必须这样做。不愉快,但这应该在编写代码时完成。您可能需要包装它们中的每一个,因为现在很难确定它是否在调用可能抛出的代码。 从技术上讲,您可以更改类工厂来创建一个包装器,它实现接口的每个方法并委托给实际方法。使用样板文件尝试/捕获处理程序。非常机械,你可能会想出一些宏来减少打击。 |
3
0
Comet 是大大简化工作的一种方法。 |
4
0
假设所有COM接口方法都使用
实际上,我并不建议这样做,但这是一种将运行时实现COM对象与外部系统隔离的方法。 |
lfox · 如果列中不存在某个值,则停止代码执行 2 年前 |
zaen · 将值传递到异常字符串消息中 2 年前 |
Zephyr · 如何在双ListView选择系统上实现过滤器? 6 年前 |
Aave · 错误数组长度的特定异常 6 年前 |