Tag: com

COM Interop,RPC服务器在c#中不可用

我正在使用COM Interop,我正在从interop dll实例化COM类对象所以,几次对象被成功实例化并进行远程过程调用没有任何问题,但有时它抛出一个exception,如RPC Server是不可用的。 我正在使用的COM组件是用VB编写的,我在c#中使用该组件。 那么,任何人都可以告诉我问题的可能原因(RPC服务器不可用)和解决此问题的方法。 我现在对这个问题很无奈。 所以,如果你能帮助我,请转发

使用C#打开Word文档(.doc)会因文件阻止设置而导致COMException

我正在尝试使用C#/ .NET和Microsoft.Office.Interop.Word打开一个非常旧的(二进制)Word文件。 每当我尝试使用下面的代码段打开此文件时,它都会因为COMException而失败,告诉我“您正在尝试打开信任中心中的文件阻止设置阻止的文件类型。” 这也常见于在MS Word中打开相同文件时发生,但在调整信任中心中找到的设置后,现在可以正常工作。 但是,我仍然无法使用C#打开文件。 有谁知道VS2010是否缓存这些设置,或者在某处使用自己的设置? 我还尝试使用相同的代码片段创建一个新项目(在修复Word中的设置之后)以查看是否有帮助,但事实并非如此。 Word.Application app; string file = “”; app = new Word.Application(); try { app.Documents.Open(file); } catch (COMException e) { string s = e.Message; }

以编程方式确定是否安装了COM库(.DLL)

在C#中是否有一种编程方式来确定是否已安装特定的COM DLL? 或者这是扫描classId的注册表的问题?

挂钩进入事件时C#中的COMException

我试图挂钩COM对象上的事件时收到COMexception。 这是我试图执行的代码。 COMClass a = IComClass as ComClass; a.SomeEvent += new SomeEvent_EventHandler(MethodNameHere); 第二行使用以下信息抛出COMException类型的exception: System.Runtime.InteropServices.COMException被捕获 消息=“来自HRESULT的exception:0x80040202” 来源= “mscorlib程序” 错误码= -2147220990 StackTrace:at System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise(Object pUnkSink,Int32&pdwCookie) 有没有人有任何想法,为什么我无法挂钩到COM事件或有一个解决方法来挂钩COM事件? 克里斯

C#Outlook 2007 COM互操作应用程序不退出!

任何想法为什么以下代码不退出通过COM互操作创建的Outlook 2007进程? Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); var item = app.Session.OpenSharedItem(“C:\\test.msg”) as Microsoft.Office.Interop.Outlook.MailItem; string body = item.HTMLBody; int att = item.Attachments.Count; (item as Microsoft.Office.Interop.Outlook._MailItem).Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard); System.Runtime.InteropServices.Marshal.ReleaseComObject(item); (app as Microsoft.Office.Interop.Outlook._Application).Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); System.Diagnostics.Debugger.Break(); 一个几乎相同的使用Word的片段工作,所以我想知道我是否忘记清理一些东西……

从VBScript调用.NET COM对象

我使用的是VS 2008和Windows 7。 得到一个.NET C#类,它作为COM对象公开。 [Guid(“E5014B85-FCB2-4F0D-95EC-F741395A7923”)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface DSystem { [DispId(1610809354)] void setProperties(IDictionary propertymap); } 从VBScript调用COM对象 dim dSystem set dSystem = CreateObject(“MYCOMOBJECT”) Dim objDictionary Set objDictionary = CreateObject(“System.Collections.Hashtable”) objDictionary.Add “PROP1”, “abc” objDictionary.Add “PROP2”, “zyx” dSystem.setProperties(objDictionary) 一切正常……但是,返回类型从void变为bool [DispId(1610809354)] bool setProperties(IDictionary propertymap); 和 success = dSystem.setProperties(objDictionary) 导致错误 Microsoft VBScript运行时错误“800a0005” 无效的过程调用或参数 .tlb文件似乎没问题 [id(0x6003000a)] HRESULT setProperties( [in] IDictionary* […]

启用本机代码调试以深入到COM对象中

我有一些代码使用COM公开的第三方库(ArcObjects)。 例如,有IGeometry IGeometry 。 IGeometry geometry = GetGeometry(); 现在,当我想查看对象成员时,我打开了一个QuickWatch: 我已经阅读了几个问题,这些问题都指向Visual Studio 2015中的“启用本机代码调试”选项。我已经启用该选项无济于事。 如何让调试器公开COM对象的成员? 编辑:当使用VS2010和.NET 3.5时,这适用:

无法添加对“Microsoft Windows Installer对象库”的引用

我无法在VS2012中添加对“Microsoft Windows Installer对象库”的引用。 任何想法,什么可能导致这个问题? 当我尝试创建COM组件的引用时,我收到此错误消息“无法添加对’Microsoft Windows Installer对象库’的引用”。 VS项目是基本类库(c#x86)。

如何检查COM组件(EXE / DLL文件)是否已注册(使用.NET)?

如何使用.NET检查COM组件(EXE / DLL文件)是否已注册?

通过COM包装器从托管代码调用COM可见托管组件

我有一个第三方组件,让我们说FIPreviewHandler来处理预览,它实现了IPreviewHandler。 FIPreviewHandler实现为托管组件,并通过互操作使用IPreviewHandler接口和相关接口。 FIPreviewHandler使用regasm.exe作为COM注册。 我有一个客户端应用程序也是托管的。 我想在我的应用程序中创建一个FIPreviewHandler实例作为COM组件。 我有一个interop程序集,定义IPreviewHandler和相关的接口。 当我使用Activator.CreateInstance()创建FIPreviewHandler的实例时,对GetTypeByCLSID()返回的类型使用FIPreviewHandler的正确CLSID,它返回一个托管实例,因为它具有可用的实际程序集,并跳过COM 。 当我尝试将此实例作为任何接口(例如IPreviewHandler)进行QI /转换时,它返回null,因为它作为托管对象加载,尽管FIPreviewHandler实现的IPreviewHandler接口与我在interop中的接口相同,但它在一个不同的命名空间/程序集中,因此为null。 如果要返回一个COM实例/ RCW(System .__ ComObject),它将不会考虑名称空间,并且会被强制转换,并返回一个有效的实例。 FIPreviewHandler是一个32位组件,在64位Win7机器上,如果我将我的客户端应用程序编译为“任何CPU”,Activator.CreateInstance()将返回一个COM实例/ RCW(System .__ ComObject),因为它会找到64位实现FIPreviewHandler,因此返回一个代理。 在这种情况下,我的应用程序工作正常。 但是当我为x86编译它时,它获得32位实现,并返回实际托管类的托管实例,而不是COM实例,因此失败。 我不能使用FIPreviewHandler程序集中定义的接口,因为我必须为IPreviewHandler编写通用客户端,我的应用程序将与任何实现IPreviewHandler的组件一起使用,这对于基于C ++的客户端访问FIPreviewHandler作为COM对象非常有用,但是失败了对于托管客户。 我希望我有意义,我会非常感激任何帮助。