问题标签 [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.

0 投票
1 回答
6281 浏览

.net - 是否可以使用 .NET 泛型类实现 COM 接口?

我有以下界面,我试图使 COM 可见。当我尝试生成类型库时,它不喜欢我的实现类派生自泛型类的事实。

是否可以将泛型类用作 COM 实现类?(我知道我可以编写一个非通用包装器并将其导出到 COM,但这增加了另一个我宁愿不做的层。)

错误信息:

0 投票
5 回答
13458 浏览

java - 是否可以从 Java 调用 COM API?

是否可以从 Java 调用 COM API(特别是 HP/Mercury Quality Center OTA API)?如果是这样,最好的方法是什么?

像 JACOB 这样的东西合适吗?

代码片段将对基础有所帮助:-)

0 投票
1 回答
503 浏览

c++ - 从工具栏获取 Internet Explorer 中当前页面的地址

我试图在 MFC 中为使用 COM 的 Internet Explorer 创建一个工具栏(钢筋中的工具带)。

是否可以从工具栏中获取当前查看页面的地址(即https://stackoverflow.com/questions/ask在我的情况下:-))?

如果是这样,我应该注意什么?

谢谢!

0 投票
9 回答
149876 浏览

.net - 是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

我见过一些包装 Gecko 渲染引擎的 COM 控件(GeckoFX以及 Mozilla 提供的控件 - mozctlx.dll)。是否有可以包含在 .NET Winform 应用程序中的 Webkit 包装器?

0 投票
3 回答
6354 浏览

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 感到困惑。

我该如何解决或至少进一步诊断此问题?

0 投票
2 回答
671 浏览

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总是不可信的?

0 投票
4 回答
10818 浏览

c++ - 哪个是对的?捕获(_com_error e)还是捕获(_com_error& e)?

我应该使用哪一个?

或者

0 投票
3 回答
2176 浏览

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。

0 投票
2 回答
589 浏览

winforms - 在 Winforms 应用程序中选择 Office 2003/2007 COM 对象(正确的一个)

我们正在创建一个需要引用 Office 2003 或 Office 2007 COM 对象的 Windows 窗体应用程序(C# 或 VB.NET),具体取决于安装的 Office 版本。处理这种情况并在运行时引用正确的 COM 对象的最佳方法是什么?

0 投票
3 回答
2806 浏览

.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 月),我已经给他发了一封电子邮件,要求澄清,但如果其他人必须添加一些东西,请做。

谢谢