问题标签 [com]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 是否可以使用 .NET 泛型类实现 COM 接口?
我有以下界面,我试图使 COM 可见。当我尝试生成类型库时,它不喜欢我的实现类派生自泛型类的事实。
是否可以将泛型类用作 COM 实现类?(我知道我可以编写一个非通用包装器并将其导出到 COM,但这增加了另一个我宁愿不做的层。)
错误信息:
java - 是否可以从 Java 调用 COM API?
是否可以从 Java 调用 COM API(特别是 HP/Mercury Quality Center OTA API)?如果是这样,最好的方法是什么?
像 JACOB 这样的东西合适吗?
代码片段将对基础有所帮助:-)
c++ - 从工具栏获取 Internet Explorer 中当前页面的地址
我试图在 MFC 中为使用 COM 的 Internet Explorer 创建一个工具栏(钢筋中的工具带)。
是否可以从工具栏中获取当前查看页面的地址(即https://stackoverflow.com/questions/ask在我的情况下:-))?
如果是这样,我应该注意什么?
谢谢!
.net - 是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?
我见过一些包装 Gecko 渲染引擎的 COM 控件(GeckoFX以及 Mozilla 提供的控件 - mozctlx.dll)。是否有可以包含在 .NET Winform 应用程序中的 Webkit 包装器?
c# - 为什么 regasm.exe 使用错误的 GUID 注册我的 c# 程序集?
我有 ac# 程序集,我通过 COM 从 Delphi(win32 本机)应用程序中调用它。
这适用于我测试过的所有机器,除了一台。
问题是 Delphi 应用程序在尝试创建 COM 对象时得到“类未注册”。
现在,当我查看注册表时HKEY_CLASSES_ROOT\DelphiToCSharp\CLSID
,那里列出的 GUID 与 AssemblyInfo.cs 中的程序集 Guid 不同。它应该是相同的 - 在安装它的所有其他计算机上都是相同的。
我试过regasm /unregister delphitocsharp.dll
了,这会删除注册表项。然后,如果我这样做regasm delphitocsharp.dll
,注册表项会返回,但 GUID 与以前相同(即错误),并且 Delphi 仍然得到“类未注册”。
工作机器上的 DelphiToCSharp.dll 与非工作机器上的版本相同(使用 md5 验证)。
我能想到的只是之前注册了旧版本的 dll,并且仍然存在该文件的一些残留物,这让 regasm 感到困惑。
我该如何解决或至少进一步诊断此问题?
c# - 在 OOXML 中使用大型二进制段的问题
系统描述
使用 OOXML 生成文档的绘图组件。
绘图组件由几个部分组成。除了 OOXML 文档的接口外,所有部分都用 C++ 编写为 exe + dll。后一个组件是在 C#/.NET 中创建的 COM 组件。主要原因是 .NET 框架包含System.IO.Packaging。这是一个非常方便的内置工具,用于处理 OOXML 文档。
我们从模板 OOXML 文档中创建一个文档,其中某些点点滴滴被它们的实际内容替换。
这些位之一是 OLE 服务器组件。基本上,这是 OOXML 文件中的二进制段。为了编写这个二进制段,Packaging 组件显然使用了隔离存储。
问题
写入大于 8MB 的段会导致抛出异常“无法确定域的身份”。
在 C++ 端,此异常包含错误 ISS_E_ISOSTORE (0x80131450)。
我们已经对此进行了分析,据我们所知,这是一项安全功能,可防止半不受信任的第三方组件通过编写大量文件来完全破坏您的 HD。
然后,我们在 .NET/COM 组件中尝试了很多东西(创建自定义 AppDomain,设置属性以获得最大许可,创建我们自己的 Streams 并将它们传递给 Packaging 组件),但每次都会引发相同的异常。
我们可以做些什么来完成这项工作?
难道当.NET组件被实例化为COM组件时,它的AppDomain总是不可信的?
c++ - 哪个是对的?捕获(_com_error e)还是捕获(_com_error& e)?
我应该使用哪一个?
或者
c# - 从通过反射调用的 COM 方法中检索原始错误号
我有一个 VB6 COM 组件,我需要从我的 .Net 方法中调用它。我使用反射来创建 COM 对象的实例并以下列方式激活它:
我需要使用 GetTypeFromProgID 而不是使用 tlbimp 来针对 COM DLL 创建一个库,因为我需要实例化的类型的 ProgId 可能会有所不同。然后我使用 Type.InvokeMember 在我的代码中调用 COM 方法,例如:
我捕获任何引发的 TargetInvocationException 进行日志记录,并且可以从 TargetInvocationException.InnerException 字段中获取详细的错误描述。但是,我知道 COM 组件使用 Error.Raise 来生成错误号,我需要以某种方式在我的调用 .Net 应用程序中获取它。
问题似乎源于 TargetInvocationException 不包含错误号,正如我所期望的那样,如果它是一个正常的 COMException 则:
如何从我的 .Net 代码中的 COM 对象获取错误号?
或者
当 COM 组件失败时,我能否以一种会导致 COMException(包含错误号)而不是 TargetInvocationException 的方式进行相同的调用?
另请注意,目标平台是 .Net 2.0,我确实可以访问 VB6 源代码,但会认为将 VB6 引发的错误消息更改为包含错误代码作为文本的一部分有点像 hack。
winforms - 在 Winforms 应用程序中选择 Office 2003/2007 COM 对象(正确的一个)
我们正在创建一个需要引用 Office 2003 或 Office 2007 COM 对象的 Windows 窗体应用程序(C# 或 VB.NET),具体取决于安装的 Office 版本。处理这种情况并在运行时引用正确的 COM 对象的最佳方法是什么?
.net - 运行时可调用包装器 (RCW) 范围 - 进程或应用程序域?
引用非托管 COM 对象时,运行时可调用包装器 (RCW) 的范围是什么?根据文档:
运行时为每个 COM 对象只创建一个 RCW,无论该对象上存在多少引用。
如果我不得不“猜测”——这个解释应该是“每个进程一个”,但真的是这样吗?任何额外的文档都将非常受欢迎。
我的应用程序在它自己的应用程序域中运行(它是 Outlook 插件),我想知道如果我在循环中使用 Marshal.ReleaseComObject(x) 直到它的计数达到 0(如推荐的那样)会发生什么。它会释放来自其他插件的引用(在同一 Outlook 进程中的其他应用程序域中运行)吗?
编辑:完美 - 现在混乱更大了。基于 2 个答案(来自 Lette 和 Ilya),我们有 2 个不同的答案。官方MSDN 文档说每个进程(对于版本 2.0+),但是对于版本来说它缺少这句话。1.1 的文档。
同时,在 Mason Bendixen 的文章中,它说它是 per appdomain。
由于他的文章很旧(2007 年 4 月),我已经给他发了一封电子邮件,要求澄清,但如果其他人必须添加一些东西,请做。
谢谢