问题标签 [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 投票
2 回答
1110 浏览

dll - 哪个“更好”:带有 Typelib 的 COM DLL 或标准 DLL?

我将“更好”放在引号中,因为这是一个定性问题。几年来我一直在编写 COM DLL,直到最近才发现并成功使用了带有 Typelib 概念的标准 DLL。

使用 COM DLL 代替 DLL+Typelib 是否有任何令人信服的理由?当然,你不能用 DLL+Typelib 做 DCOM,但这是唯一的原因吗?

编辑我已经用 Visual C/C++ 6、Compaq Visual Fortran、Delphi、Visual BASIC 6、ActiveState Perl 和其他一些语言编写了 COM DLL。我用 Visual C/C++ 6、Delphi、Ada 和其他一些语言编写了标准 DLL。我已经为我自己的一些标准 DLL 以及第三方 DLL 编写了类型库。该问题最初是在 VB6 原件的 Delphi DLL+Typelib 重新实现的上下文中编写的。

0 投票
2 回答
332 浏览

c# - 如何从 C# 或 F# 访问 IMetaDataEmit 和其他 MetaData COM 接口?

我正在用 F# 编写编译器,我希望能够在 .net 运行时访问非托管元数据 COM 接口。在任何人提到它之前,Reflection.Emit 不适合我的目的,我也不想使用元数据 COM 接口以外的任何其他方法。

我已经导入了 mscoree.tlb,但它似乎没有包含我需要的接口。

我感兴趣的接口包括IMetaDataEmit。任何与此相关的示例代码都会非常有用,尽管到目前为止我还没有找到。

C# 示例会很好,因为我可以轻松地将它们转换为 F#。

提前感谢任何可以帮助我解决这个相当神秘的查询的人!

更新:我现在已经通过使用接口 GUID 编写显式 COM 引用来进行排序!

0 投票
1 回答
2616 浏览

c# - 如何获取 Windows 中可用 COM 接口的列表

有没有办法在 Windows 机器上获取已注册的 COM 接口列表,带有 GUID?

在有人认为这与编程无关之前,我需要这些数据以便在 F#(或 C#)中为 tlbimp 未公开的接口引用 COM 接口。

0 投票
2 回答
3558 浏览

c# - 在 .NET 中派生 COM 接口

由于我无法控制的公司限制,我有以下情况:

定义以下接口的 COM 库(没有 CoClass,只有接口):

我有一个 COM(用 C++ 编写),它实现了这两个接口并为我们的应用程序提供了上述服务。一切都很好,我想。

我正在尝试在.NET(C#)中 构建一个新IProvider的。IService

我为 COM 库构建了一个主互操作程序集,并实现了以下 C#:

当我尝试将其滑入现有运行时时,我能够NewProvider从 COM (C++) 和QueryInterfaceIServiceProvider 创建对象。当我尝试调用 IServiceProvider 上的方法时,System.ExecutionEngineException会抛出 a。

我能找到的唯一另一件事是查看由#import 创建的.tlh 文件,它显示了旧的COM IExistingProvider 类正确地表明它是从IServiceProvider 派生的。然而,.NET 类显示了 IDispatch 的基础。我不确定这是否是一个标志、指示、有用的东西,或者别的什么。

0 投票
3 回答
6304 浏览

com - 是否有列出从 DLL 导出的方法的工具?

正如问题所述 - 是否有一个很好的工具可以列出非托管 DLL 导出的方法?我也希望它列出 COM 方法和接口。

0 投票
1 回答
514 浏览

c# - 如何使用 UIAutomation 与旧的 ActiveX SSUltraGrid 读取/交互

我正在研究使用 ActiveX 控件的旧 Win32 应用程序的自动化测试。我正在使用使用 Microsoft UIAutomation 的 White(来自 Thougthworks)。我可以找到与控件相关的 AutomationElement,但是如何与之交互呢?

Spy++ 将网格控件视为单个窗口,因此我不能直接与行、列或单元格对话。如何从我的测试代码中与 SSUltraGrid 控件对话?

干杯奈杰尔

0 投票
2 回答
2127 浏览

com - 我可以创建一个带有多个控件的 VB6 OCX 吗?

我继承了一大堆 VB6 代码,其中包含大量单独的 OCX 文件,每个文件都包含一个控件。我有两个问题:

首先,是否可以重构它们,以便我可以拥有一个包含所有 OCX 的 OCX 文件?

其次,如果可能的话,我该怎么做?

TIA

0 投票
3 回答
2857 浏览

c# - 用于从 C# 获取 C 样式数组的函数的 IDL 声明(在 C++ 中)

我正在使用由一些用 C++ 编写的带有 C# 前端的 COM 接口组成的现有代码库。有一些新功能需要添加,所以我不得不修改 COM 部分。在一种特殊情况下,我需要将一个数组(从 C# 分配)传递给要填充的组件。

我想做的是能够将一个 int 数组从 C# 传递给该方法,例如:

几个扳手在工作:

  • 不能使用 C++/CLI 或托管 C++(在这种情况下可以取消 COM)。
  • C# 端不能用 /unsafe 编译(允许使用 Marshal)。

COM 接口仅由 C# 部分使用(将永远使用),因此我不太关心与其他 COM 使用者的互操作性。32 位和 64 位之间的可移植性也不是问题(一切都在 32 位机器上编译和运行,因此代码生成器正在将指针转换为整数)。最终,它将被 C++/CLI 取代,但这还有很长的路要走。


我最初的尝试

类似于:

并且输出 TLB 定义是(似乎合理):

这是由 C# 导入的(不太合理):

可以用它

...除了我不能用 /unsafe 编译。


在这一刻

我在用:

其中导入为:

我需要像这样使用它:

哪个有效...,但我想找到一种更清洁的方法。


所以,问题是

对于这种情况,是否存在对从 TLB 生成器导入 C# 友好的 IDL 定义?如果没有,在 C# 端可以做些什么来让它更安全一点?

0 投票
2 回答
2067 浏览

c++ - C++ 中 Thread.SetApartmentState 的等价物是什么?

在 C#SetApartmentState中,类中有一个方法Thread。我如何在 C++ 中做同样的事情?

0 投票
4 回答
559 浏览

multithreading - COM:从其他线程调用会导致崩溃,如何让它在同一个线程上运行?

我正在做一个在其他线程上接收事件的 BHO(IE 扩展)。当我从其他线程访问 DOM 时,IE 崩溃。是否可以使 DOM 从与主 BHO 线程相同的线程访问,以免崩溃?

这似乎是一个通用的 COM 多线程问题,我不太了解。