问题标签 [com-interop]

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 投票
17 回答
555148 浏览

.net - 由于以下错误,检索具有 CLSID {XXXX} 的组件的 COM 类工厂失败:80040154

我使用 C#.NET 开发了一个 Windows 服务来生成 PDF 报告。要生成 PDF 文件,我正在使用第三方 dll。该应用程序在我的 Windows XP 平台上运行。当我在Windows Server 2008 64 位版本中部署服务时,我得到了这个错误:

由于以下错误,检索具有 CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} 的组件的 COM 类工厂失败:80040154。

我使用 regsvr32 命令注册了 DLL。我可以在注册表中看到这个 CLSID。但问题仍然存在。

可能是什么问题呢?

0 投票
6 回答
2733 浏览

c# - 使用互操作在 Excel 工作簿中编写长文本会引发错误?

我正在将长文本(1K 到 2K 字符长,纯 xml 数据)写入 excel 工作簿中的单元格。以下语句从 HRESULT 引发 COM 错误异常:0x800A03EC

如果我手动将相同的 xml 复制粘贴到 excel 中,它就可以正常工作,但同样不能以编程方式工作。如果我将文本剥离为 100/300 个字符,它可以正常工作。

0 投票
1 回答
2876 浏览

c# - Excel 对象模型中的 VBComponents 对象在哪里?

嗨,我正在使用 c# 和 excel-2007 ...我想添加一个宏到 excel 并从 c# 运行,我认为我需要访问 VBComponents 但不幸的是我在执行以下操作后看不到它

我应该添加任何 com 对象吗?或者我应该怎么做才能看到 VBComponents...

我已经有了

0 投票
3 回答
875 浏览

c# - 通过 COM 为 C++ 客户端公开 C#

我们正在考虑通过 COM 向 C++ 客户端公开一些 C# 类型。在项目的整个生命周期中,我们预计会遇到哪些问题?例如,如何管理版本控制?

在版本控制中,从阅读本文看来,我们应该装饰我们的类型以暴露[ClassInterface(ClassInterfaceType.None)]并使用显式接口。这样,我假设我们完全控制将公开给 COM 客户端的接口。

提前致谢。

0 投票
3 回答
516 浏览

c# - C++ 调用 C# 选项

我们有本机 Win32 C++ 代码和一组我们希望从 C++ 代码调用的 C# 程序集。我将我们的选项总结为:

  1. 使用 COM。C# 代码需要使用其他属性(GUID、COMVisible)进行修饰。C# 程序集需要注册 regasm,然后通过 COM 可用于本机 C++ 代码。

  2. 使用 C++/CLI(以前托管的 C++)包装类。可以将 C++ 类添加到本机 C++ 项目中。该类将使用 /clr 编译。本机 C++ 代码将调用 C++/CLI 类,然后再调用 .Net 代码。不涉及 COM。CLR 由 C++/CLI 扩展处理的编组所需的魔法启动。

  3. 在本机 C++ 代码中托管 CLR 的实例。

我将打折选项 3,因为除了我们不再需要包装类之外,我看不到选项 2 的好处。所以问题是,选项 1 与选项 2 的优缺点是什么?

提前致谢。

0 投票
1 回答
689 浏览

.net - 在 .NET 和 COM 之间编组复杂的数据类型

我花了最后一天左右的时间在 VB.NET 中编写了一个简单的控件库,以便在现有的 vb6 项目中使用。我的大部分事情都在工作;我的控件显示在 vb6 工具箱中,事件工作等。我当前的问题是尝试处理在 vb6 和 .NET 之间传递复杂对象。

例如,.NET TextBox 的 Font 属性。现在,vb6 使用 stdFont 对象,而 .NET(显然)使用 System.Drawing.Font 类型。我对这个项目的目标是使更改从 vb6 方面变得透明。我想为每个控件完全模拟 vb6 界面,以最大限度地减少添加新控件时需要更改的代码,但我被困在这里。这是一个示例(.NET):

如您所见,“吸气剂”是问题所在。如果无法返回文本框的 Font 属性,如何在此处模仿 vb6 界面?出于明显的原因,我不想返回 System.Drawing.Font 的 stdFont 副本。

现在,我可以添加诸如 SetBold()、SetItalic() 和 SetFont() 之类的方法(或诸如“FontIsBold”之类的布尔属性),但这正是我想要避免的。我的互操作经验相当少,因此我们将不胜感激。

0 投票
2 回答
987 浏览

c# - 如何使用 ActiveXObject 从 JavaScript 创建我的 C# Com 类

我将 C# 类写入 COM,但无法从 JavaScript 中使用它。例子

我检查了项目属性的“注册 COM 互操作”复选框。

当我想像这样从 JavaScript 创建它时。

var a = ActiveXObject("Scripting.Commands");

我收到“自动化服务器无法创建对象”异常。我怎么了。

谢谢

0 投票
6 回答
3119 浏览

c# - 如何在 .Net 中序列化 COM 对象?

我需要使用 .net 使用 c# 或 Delphi .Net 序列化 Com 对象,这可能吗?

0 投票
3 回答
697 浏览

c# - 异常处理:当涉及到参数验证时,你会走多远?

我正在用一个方法编写一个简单的小类发送电子邮件。我的目标是在旧版 Visual Basic 6 项目中实现它,通过 COM 互操作工具将其作为 COM 对象公开。

我发现有一个细节很难解决,那就是我在验证参数时应该有多细。从这个角度来看,我真的不满意的一件事,而且根本不是细节,是我实际处理异常的方式:

任何建议将不胜感激,因此非常感谢您的所有评论!

注意:在这种特殊情况下实现企业库的验证应用程序块是否方便?

0 投票
1 回答
2888 浏览

c++ - 当某些条件满足时,如何在运行时在 C++ 中导入 tlb 和命名空间?

通常我们在程序开始时导入一个 tlb 文件,例如

但是当程序中间满足某些条件时,我需要导入一个 tlb 文件

我怎样才能做到这一点。加载 dll 有LoadLibrary()但加载 tlb 我可以使用LoadLibrary()

由于 tlb 是使用 .dll 生成的?