问题标签 [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 回答
2918 浏览

在 VB6 IDE 中工作时卸载 COM 控件

我日常工作的一部分是维护和扩展遗留的 VB6 应用程序。通用引擎是用 C/C++ 编写的,VB6 使用这些函数来提高性能。

对于异步编程,C 接口是不够的,我们依靠 COM 控件向 VB6 触发事件。

我的问题是,当我在 VB6 中注册控件时,VB 会将此控件加载到内存中,并且在我退出 VB6 IDE 之前不会将其卸载。由于控件一直加载,我无法在 VC6 中重新编译它,因为 DLL 文件被锁定。

我发现的一个解决方案不是在 VB 中启用控件,而是使用CreateObject()我的控件的全名。那么问题是我必须将我的控件声明为一个对象,因为 VB6 对我正在使用的接口一无所知,而且我无法访问 IntelliSense,这很痛苦。

知道如何告诉 VB6 在退出应用程序后或直接在 IDE 中卸载控件吗?

0 投票
4 回答
592 浏览

如何跟踪 COM 对象异常?

我有一个带有一些COM 对象的DLL。有时,此对象会崩溃并在 Windows 事件日志中注册一个错误事件,其中包含大量十六进制信息。我不知道为什么会发生这种崩溃。

那么,如何跟踪那些 COM 对象异常呢?

0 投票
5 回答
4243 浏览

.NET 进程外服务器的#import 问题

在 C++ 程序中,我正在尝试 #import TLB of .NET out-of-proc server。

我收到如下错误:

z:\server.tlh(111) : 错误 C2146: 语法错误: 缺少 ';' 在标识符“GetType”之前

z:\server.tlh(111) : 错误 C2501: '_TypePtr' : 缺少存储类或类型说明符

z:\server.tli(74):错误 C2143:语法错误:缺少“;” 在'标签::id'之前

z:\server.tli(74) : error C2433: '_TypePtr' : 'inline' 不允许在数据声明中使用

z:\server.tli(74):错误 C2501:'_TypePtr':缺少存储类或类型说明符

z:\server.tli(74) : 致命错误 C1004: 发现文件意外结尾

TLH 看起来像:

我对拥有基本对象 .NET 对象方法(如 GetType()、Equals() 等)并不真正感兴趣。但 GetType() 似乎会导致问题。

一些谷歌研究表明我可以#import mscorlib.tlb(或将其放入路径中),但我也无法编译。

有小费吗?

0 投票
1 回答
3803 浏览

如何从 VS Setup 项目注册 COM?

我已将我的 DLL 标记为 vsdraCOM,安装后我可以在注册表中看到它,但我的应用程序在手动调用 RegAsm 之前看不到 COM 接口。为什么会这样?

COM注册在Vista(本人确认)和XP(经同事确认)上不起作用。在 XP 上使用 Visual Studio 2005。

0 投票
2 回答
327 浏览

有没有一种方法可以处理 RDML 中 COM 对象的错误?

有没有一种方法可以处理 RDML 中 COM 对象的错误?例如,当调用 Word VBA 之类的方法时PasteSpecial,会返回错误并且 LANSA 应用程序崩溃。我在文档中找不到任何允许处理这些错误的内容。

实际上,错误处理通常是 LANSA 和 RDML 的弱点,但这是另一个话题。

0 投票
5 回答
5734 浏览

Delphi 和 COM:TLB 和维护问题

在我工作的公司,我们所有的GUI都是用C#开发的,但是应用内核主要是用Delphi 5开发的(由于历史原因),很多组件都是用COM+做的。与这种非常具体的应用程序相关,我有两个问题:

  • 在 Delphi 和/或 COM 方面有经验的人,你有什么办法可以使用有缺陷的 TLB 界面吗?一些错误是:编辑大型 TLB 期间 IDE 崩溃、方法 ID 丢失、TLB 损坏等。在这里,我们还没有找到任何好的解决方案。实际上,我们尝试升级新的 2007 版本。但是新的 IDE TLB 接口与我们之前发现的 bug 相同。

  • 您如何控制 TLB 版本?TLB 文件是二进制格式,解决冲突非常困难。我们尝试将接口描述导出到 IDL 并提交到 CVS,但我们没有找到任何使用 Delphi 从 IDL 生成 TLB 的好方法。另外,微软提供的 MIDL 工具没有正确解析我们从 delphi 导出的 IDL 文件。

0 投票
3 回答
15405 浏览

当 /u arg 不起作用时,如何取消注册最初使用 RegSvr32 添加的 COM dll?

对,最初运行:

然后,(意外地——我可能会补充)我必须再次运行它,并且(确实)在发布新版本的“Amazing.dll”时再次运行它。是的 - 我现在知道我应该运行:

事先 - 但是,嘿!我忘了。

切入正题,当在 VS 中添加 COM 引用时,我可以看到 3 个“Amazing”实例都指向同一个位置 (c:\Amazing.dll),运行regsvr32 /u会删除其中一个引用,第二次 - 确实没有...

我如何摆脱这些引用?我在看一个注册表编辑器场景吗?- 如果是这样 -如果我删除其中一个键会发生什么

干杯

0 投票
2 回答
2332 浏览

共享点 COMException 0x81020037

我正在开发一个支持在单个操作中导入多个文档的 SharePoint 应用程序。我还有一个 ItemAdded 事件处理程序,它执行项目元数据的一些基本维护。导入的文档和手动创建的文档都会触发此事件。难题的最后一块是我实现的批处理操作功能,以启动工作流并更新另一个元数据字段。

我可以通过提取 SPListItem 的文件数据来导致 COMException 0x81020037。此文件只是一个 InfoPath 表单/XML 文档。我能够修改 XML 并成功地将其推回 SPListItem。当我之后立即启动自定义功能并修改元数据时,它偶尔会导致 COM 错误。

该错误消息基本上表明该文件已被另一个线程修改。似乎 ItemAdded 事件仍在将文件写回数据库,而自定义功能正在更改元数据。我尝试过延迟和错误捕获循环,以尝试检测 SPListItem 可以安全修改但收效甚微。

有没有办法判断另一个线程是否锁定了文档?

0 投票
2 回答
667 浏览

在 Windows 中拖放的通知

我的C#程序有一个文件列表,可以从中拖放到另一个程序中。我的要求是先将文件复制到不同的目录。

那么,是否可以通知我删除操作,以便我只能在操作成功时复制文件?在实际执行复制之前,我宁愿等到我知道需要复制它。

另外,是否有可能知道 drop 操作发生在哪个程序中?理想情况下,我想根据被删除的对象或内容来更改文件路径。

对此的解决方案可以使用任何 .NET 语言或C/C++使用COM.

0 投票
4 回答
1967 浏览

如何实现类型安全的 COM 枚举?

我如何在 COM 场景中在 Delphi 中实现类型安全枚举?基本上,我想用封装在类中的一组静态最终对象引用替换枚举的一组原始常量?. 在 Java 中,我们可以这样做:

并使用自定义的枚举类型进行比较:

我目前正在使用旧的 Delphi 5,我想在接口上声明一些枚举参数,不允许客户端对象传递整数(或长整数)类型来代替所需的枚举类型。除了使用本机 delphi 枚举之外,您还有更好的方法来实现枚举吗?