34得票4回答
如何获取COM对象的类型

我在Visual Studio中引用了一个COM库,所以它自动为我创建了相应的Interop程序集。我想对这些COM对象执行GetType(),但它们总是返回System.__ComObject。不过,通过查询它们的接口可以正常工作:bool isOfType = someComeObject...

32得票6回答
最快的将实时(未保存)的Excel数据与C#对象进行接口交互的方法

我想知道从一个打开的Excel工作簿读取和写入数据到C#对象的最快方法是什么。背景是我想开发一个C#应用程序,该应用程序从Excel中使用数据,用户将在Excel中使用该应用程序并单击Excel工作簿上的按钮(或执行类似操作)来启动C#应用程序。 C#应用程序将从Excel工作簿读取数据,处理...

20得票5回答
不使用regasm进行COM互操作

我是一个普通用户,需要编写一个Outlook宏,可以在Outlook 2003和2007中使用C#库。 我没有任何管理员权限,甚至在安装时也没有这些权限,因此我无法运行RegAsm,也不能(我猜)编写托管插件。 在这种情况下,是否有办法从VBA调用.NET代码,或是否有其他解决方案? 这...

20得票10回答
能否拦截(或知道)暴露给COM的CLR对象的COM引用计数?

我已经重新表述了这个问题。 当通过COM互操作将.NET对象暴露给COM客户端时,会创建一个CCW(COM可调用包装),它位于COM客户端和托管的.NET对象之间。 在COM世界中,对象保留其他对象对其的引用计数。当该引用计数降为零时,对象被删除/释放/收集。这意味着COM对象终止是确定性...

20得票1回答
通过COM4J从.NET方法返回接口数组

我怎样才能通过COM4J从C#方法返回一个实现了COM接口的对象数组给Java方法呢? 生成数组的C#示例类:using System; using System.Runtime.InteropServices; namespace Example { [ComVisible(t...

19得票4回答
Visual Studio - TYPE_E_REGISTRYACCESS

我正在构建我的 Visual Studio 解决方案,在输出窗口中只有一个项目出现了错误。 在错误选项卡中:Error 161 Cannot register type library "D:\Sites\Website\MyPortal.Website.Controllers...

19得票1回答
注册托管COM组件时,是否需要使用“已实现类别”键?

手动注册托管类以供 COM 互操作时,需要某些注册表键。例如:HKEY_CLASSES_ROOT CLSID\[My Cls Id] InprocServer32 (Default) = "mscoree.dll" Assembly = [My assembly...

19得票4回答
在构建服务器上注册COM引用的DLLs

我们正在开发一个引用了一些COM库(例如AutoIT)的C#应用程序。 我将所有引用的组件都包含在第三方“Libs”文件夹下,并纳入源代码控制中。 问题是,在.csproj文件中,COM dll没有HintPath属性,我认为这些必须手动使用regsvr32进行注册(或使用某种脚本)。 ...

19得票2回答
托管组件中的Await和SynchronizationContext在未托管应用程序中托管。

[编辑] 这似乎是框架实现中Application.DoEvents的一个错误,我已在此处报告了这个问题。 在UI线程上恢复错误的同步上下文可能会严重影响像我这样的组件开发人员。悬赏的目的是引起更多关注这个问题,并奖励 @MattSmith ,他的答案帮助我们跟踪到了这个问题。 我负责一个基...

19得票1回答
何时需要/适合在COM互操作中使用InAttribute和OutAttribute?

我正尝试整理我们在各个项目中散布着的COM互操作定义,并将它们收集到一个单一的、确定无误的位置,以便整个开发团队可以从中受益。这一努力的一部分涉及清理多年积累的定义。 其中一些是从其他源代码借用来的,有些是直接从pinvoke.net复制而来的,还有一些看起来是直接从SDK头文件翻译过来的。...