1
4
.NET COM互操作不会将所有COM消息直接路由回调用方。如果你从一个STA打电话给COM,它将无法理解你的应用程序如何处理重新进入。这意味着可以通过重试处理的失败消息最终会导致异常。 尝试实施 IMessageFilter 接口。这将允许COM了解如何将消息传回您的应用程序。尤其是,实施 RetryRejectedCall 并检查故障是否标志并可能返回超时值(比如1000毫秒),以允许COM在短暂暂停后重试。 它是一个COM类型,因此这是定义接口所需的代码:
这是您将如何实现它的一个示例:
一旦实现了消息过滤器,就需要使用 CoRegisterMessageFilter . 这是每个线程的注册,因此请注意您正在调用它的线程。这个 PInvoke signiture is :
即使这不起作用,至少,如果你把所有的消息都记录在过滤器中,你应该希望得到更多关于问题的信息。查看传递到消息过滤器中的参数值。如果您查找它们,它们将与错误/状态代码相关。 [请注意,我指的IMessageFilter与 System.Windows.Forms.IMessageFilter ,因此请确保不会意外使用WinForms One。] |
2
2
以下是使用Adobe PDF Reader控件的步骤:
我不知道为什么,但我必须以管理权限运行Microsoft Visual C_2008速成版才能使其正常工作。对于有限的用户,我在设计器中收到以下消息:
请注意,将Adobe PDF Reader控件添加到工具箱后,已使用名称创建了新的.NET互操作程序集。 axinterop.acropdflib.dll文件 . 已将对此新程序集的引用添加到项目引用中。 Adobe PDF Reader控件的API参考文档位于以下位置: http://icio.us/ajukkr 这个论坛主题提供了一些更有用的信息: http://forums.adobe.com/thread/438362 |