问题标签 [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.
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 重新实现的上下文中编写的。
c# - 如何从 C# 或 F# 访问 IMetaDataEmit 和其他 MetaData COM 接口?
我正在用 F# 编写编译器,我希望能够在 .net 运行时访问非托管元数据 COM 接口。在任何人提到它之前,Reflection.Emit 不适合我的目的,我也不想使用元数据 COM 接口以外的任何其他方法。
我已经导入了 mscoree.tlb,但它似乎没有包含我需要的接口。
我感兴趣的接口包括IMetaDataEmit。任何与此相关的示例代码都会非常有用,尽管到目前为止我还没有找到。
C# 示例会很好,因为我可以轻松地将它们转换为 F#。
提前感谢任何可以帮助我解决这个相当神秘的查询的人!
更新:我现在已经通过使用接口 GUID 编写显式 COM 引用来进行排序!
c# - 如何获取 Windows 中可用 COM 接口的列表
有没有办法在 Windows 机器上获取已注册的 COM 接口列表,带有 GUID?
在有人认为这与编程无关之前,我需要这些数据以便在 F#(或 C#)中为 tlbimp 未公开的接口引用 COM 接口。
c# - 在 .NET 中派生 COM 接口
由于我无法控制的公司限制,我有以下情况:
定义以下接口的 COM 库(没有 CoClass,只有接口):
我有一个 COM(用 C++ 编写),它实现了这两个接口并为我们的应用程序提供了上述服务。一切都很好,我想。
我正在尝试在.NET(C#)中 构建一个新IProvider
的。IService
我为 COM 库构建了一个主互操作程序集,并实现了以下 C#:
当我尝试将其滑入现有运行时时,我能够NewProvider
从 COM (C++) 和QueryInterface
IServiceProvider 创建对象。当我尝试调用 IServiceProvider 上的方法时,System.ExecutionEngineException
会抛出 a。
我能找到的唯一另一件事是查看由#import 创建的.tlh 文件,它显示了旧的COM IExistingProvider 类正确地表明它是从IServiceProvider 派生的。然而,.NET 类显示了 IDispatch 的基础。我不确定这是否是一个标志、指示、有用的东西,或者别的什么。
com - 是否有列出从 DLL 导出的方法的工具?
正如问题所述 - 是否有一个很好的工具可以列出非托管 DLL 导出的方法?我也希望它列出 COM 方法和接口。
c# - 如何使用 UIAutomation 与旧的 ActiveX SSUltraGrid 读取/交互
我正在研究使用 ActiveX 控件的旧 Win32 应用程序的自动化测试。我正在使用使用 Microsoft UIAutomation 的 White(来自 Thougthworks)。我可以找到与控件相关的 AutomationElement,但是如何与之交互呢?
Spy++ 将网格控件视为单个窗口,因此我不能直接与行、列或单元格对话。如何从我的测试代码中与 SSUltraGrid 控件对话?
干杯奈杰尔
com - 我可以创建一个带有多个控件的 VB6 OCX 吗?
我继承了一大堆 VB6 代码,其中包含大量单独的 OCX 文件,每个文件都包含一个控件。我有两个问题:
首先,是否可以重构它们,以便我可以拥有一个包含所有 OCX 的 OCX 文件?
其次,如果可能的话,我该怎么做?
TIA
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# 端可以做些什么来让它更安全一点?
c++ - C++ 中 Thread.SetApartmentState 的等价物是什么?
在 C#SetApartmentState
中,类中有一个方法Thread
。我如何在 C++ 中做同样的事情?
multithreading - COM:从其他线程调用会导致崩溃,如何让它在同一个线程上运行?
我正在做一个在其他线程上接收事件的 BHO(IE 扩展)。当我从其他线程访问 DOM 时,IE 崩溃。是否可以使 DOM 从与主 BHO 线程相同的线程访问,以免崩溃?
这似乎是一个通用的 COM 多线程问题,我不太了解。