问题标签 [coclass]

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 回答
417 浏览

c# - 为什么可以创建 COM 接口的新实例?

我没有太多关于 COM 或 coclass 的背景知识,所以我不太明白为什么我可以将new操作符与接口一起使用。从与语言/框架无关的角度来看,为什么它可以正确编译和运行令人困惑:

在 Visual Studio 2010 中检查Application显示:

幕后发生了什么?

0 投票
1 回答
3807 浏览

c++ - 如何定义 COM coclass 的实现?

我是 COM 新手,我在互联网上四处寻找如何在 C++ 中创建 COM 类(供 C# 使用)。我已经在 .idl 文件中看到了,我必须这样写:

现在我的问题是,您在哪里定义 CTopologyQuery 类?如果我将它定义为另一个文件中的常规 c++ 类,编译器会将我的类与接口正确链接吗?c++ 类代码如下所示(在 .cpp 文件中实现):

现在,如果我将库部分放在 .idl 文件中,或者不这样做,它都会编译。我有点失落,因为这里有什么好处?我知道 coclass 定义应该为接口提供默认实现,但对我来说它看起来像一个没有方法的空类......

0 投票
1 回答
9371 浏览

c# - C# CoClass 属性有什么作用?

我在我们正在使用的 3rd 方库中找到了类似以下的代码。

这究竟是在做什么?msdn 文档没有充分说明这个主题,我无法理解。

0 投票
2 回答
691 浏览

c# - (ab)使用 CoClassAttribute 为接口提供默认实现是否可以?

我最近发现可以在 C# 中“新建”一个接口,方法是用 装饰接口CoClassAttribute以指定默认实现。

我知道此功能的存在主要是为了支持 COM 互操作,但我想知道这是否是将接口与通用类库中的默认实现相关联的合理方法。

我有两个问题:

  1. 这样做有什么问题吗?我不是 COM 互操作方面的专家,我不知道这是否会对 POCO 产生任何负面影响。我没有运行任何主要测试,但我的示例的 IL 似乎没问题(一个正常的newobj指令FooImpl而不是调用Type.GetTypeFromCLSIDand Activator.CreateInstance)。

  2. 即使这会顺利进行,是否还有其他原因(例如从 API 设计的角度)来避免这种情况?

0 投票
0 回答
368 浏览

c# - 为什么 tlbimp 会将接口转换为 coclass?

实际上,在大多数情况下tlbimp 会将接口转换为 coclass 的一个功能。具体来说,如果在 IDL 我有

然后 tlbimp 将看到这First是唯一要实现的类IFirst,因此它创建了一个 .NET 接口,其中interface IFirst替换为class First

这在某种程度上可能是有帮助的。

这怎么可能有用?我的意思是无论如何class First都会有相同的方法interface IFirst,所以它不会添加任何东西,所以如果没有这种转换,我可以interface IFirst到处传递并获得完全相同的效果。这个转换有什么用?

0 投票
1 回答
70 浏览

com - Inspector 和 InspectorClass 的区别

我一直在查看 VSTO 库,主要是为了好玩,我注意到有一些东西叫做Inspectoras well as InspectorClass.

有什么区别,为什么会在那里,我该如何使用它?(注意,我不是在寻找关于如何使用这些类进行编码的答案,而是在寻找某种架构模式背后的基本原理。纯粹是学术好奇心。)

0 投票
1 回答
1319 浏览

com - COM coclass 实现来自另一个类型库的接口

我在 COM 中相对较新,所以如果这是一个愚蠢的问题,我很抱歉。我将一堆 COM 接口编译到类型库A中。此类型库是我的解决方案中的一个 DLL ( a.dll ) 中的资源。在进入单独 DLL ( b.dll )的单独类型库 ( B ) 中,我想定义一个实现类型库A接口的 coclass 。请参阅下面的 IDL 代码作为我想到的简化示例:

我可以编译上面的ok,但是当我在oleview中打开MIDL生成的tlb文件时,我得到一个错误信息TYPE_E_CANTLOADLIBRARY。我开始怀疑我想做的事情是不可能的。到目前为止,我的实验表明类型库需要包含 coclass 实现的所有接口以及 coclass 定义本身。这是真的?

如果我删除该importlib("MyLibA.tlb);语句,我可以在 oleview 中查看编译的 tlb 文件而不会出错,但是MyLibB.tlb还包含接口的定义IMyInterface,即接口在两个类型库中都定义了两次。我不希望这样,因为在我的应用程序中,我使用免注册 COM 加载了a.dllb.dll。在这种情况下,当在多个类型库中遇到相同的接口定义时,激活上下文生成会失败。

有什么建议可以在单独的类型库中实现所需的接口和 coclass 分离吗?

0 投票
1 回答
128 浏览

c++ - 为什么不能从文档中调用新添加的 COM 方法?

我正在编写一个通过 COM 公开许多方法的 BHO。它们中的大多数工作正常,但最近添加的 2 个显示出奇怪的行为。

当从页面上的 JavaScript 调用时,新添加的方法“返回”未定义,而不是抛出方法或属性不存在的异常,因此对象至少知道方法在其上,但从不执行它们。

bho.h

bho.cpp:

还有我的 IDL:

我注意到可以通过更改 ID 来创建类似的行为,我尝试通过定义要实现的新接口、更改 guid、增加类型库版本等来“重置”类型库。所有这些都导致在根本不可调用的方法中。

据我在这里和 MSDN 上所做的研究可以看出,我走在正确的轨道上。如何成功地将新方法添加到我的 COM 类,以便可以在我的 BHO 对象上调用它们?BHO 尚未发布,因此界面尚未确定。

0 投票
0 回答
240 浏览

c# - 互操作不创建 coclass

我有一个遗留的 COM 组件,我需要在 .NET 代码中包装和使用它。当我使用 tlbimp 为组件创建 RCW 时,只有一个接口创建了一个 coclass,我可以对其进行调用。Rest 5 左右的接口没有 coclass。如果我在互操作的 ildasm 中查找,则只有没有 coclass 的接口。

如何使这项工作能够调用组件上的所有方法。有没有一种方法可以让我自己添加 coclass 代码并期望实现工作。

0 投票
1 回答
440 浏览

visual-studio-2013 - 为什么没有为这些 ATL 简单对象生成 ProgId?

我有一个带有一堆 ATL 简单对象(= COM 对象)的 ATL DLL,所有这些都是由向导生成的。

IDL 文件包含许多接口和一个库部分,例如:

MSDN似乎说progid应该为每个coclass自动生成一个属性。但是,我的注册表中没有。否则,DLL 在每次编译时完全正常注册,并且可以从 COM 客户端使用而不会出现任何问题。

progids 不是自动生成的怎么会发生?