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

c# - .Net 2.0:如何使用临时订阅订阅远程计算机上的事件发布者?

我的问题是我想要一个服务器应用程序(在远程计算机上)将某些事件发布到几台客户端计算机。服务器和客户端使用 .Net-Remoting 进行通信,因此目前我正在使用远程 .Net-Events 来获取功能。但是有一个缺点:当服务器(事件发布者)下线并重新启动时,客户端会失去连接,因为远程对象引用变得无效。

我正在研究松散耦合事件和瞬态 COM 订阅来解决这个问题。我将一个包含一个发布者和两个订阅者的小型演示应用程序放在一起。它在一台计算机上运行良好。

我正在使用 COMAdmin-Libraries 为事件订阅者创建临时订阅。代码如下所示:

我现在的问题是:我必须在订阅中进行哪些更改才能通过网络进行这项工作?甚至可能吗?

0 投票
3 回答
18168 浏览

c++ - 在非 Microsoft 平台上使用组件对象模型 (COM)

我经常遇到类似的情况:我有一堆 COM .DLL(没有 IDL 文件),我需要使用和调用它们才能访问一些外部(非开放、非文档化)数据格式。

Microsoft 的 Visual Studio 平台具有非常好的功能,可以导入此类 COM DLL 并在我的项目中使用它们(Visual C++ 的 #import 指令,或使用 Visual Basic .NET 的对话框选择和添加它们)——这是供应商推荐的使用方式。

我有兴趣找到一种在非微软开发平台上使用这些 DLL 的方法。即,在使用 MinGW 或 Cygwin 编译的 C++ 项目中使用这些 COM 类,甚至是 Wine 的 GCC 端口到 linux(将针对 Win32 的 C++ 编译成在 Linux 上本机运行的二进制文件)。

使用此驱动程序我取得了一些有限的成功,但这在 100% 的情况下并不成功(我不能使用某些方法返回的 COM 对象)。

有人在类似情况下取得过成功吗?

0 投票
4 回答
6880 浏览

php - 如何使用 COM 从 PHP/IIS 读取 Active Directory 组成员身份?

我有以下代码:

当我从命令提示符执行它时,它运行良好。当它在 IIS/PHP/ISAPI 下运行时,它会报错。

IIS 配置为 Windows 身份验证(无匿名、无基本、无摘要),我以与命令提示符相同的用户身份连接。我在 IIS 日志文件或事件日志中找不到任何特定错误。

本练习的主要目的是避免在我的脚本中保留用户凭据并依靠 IIS 身份验证将它们传递到活动目录。我知道您可以使用 LDAP 来完成同样的事情,但据我所知,无法传递凭据。

也许它在某种程度上与我尝试将其移植到 ASP 时遇到的错误有关。我收到错误 80072020(我目前正在查找)。

事件日志没有显示任何异常。没有警告,没有错误。启用了完整的安全审核(安全策略中每个项目的成功和失败),并且它显示我针对网页进行身份验证的每个用户的成功 Windows 登录(这是预期的。)

0 投票
1 回答
1230 浏览

c++ - 在 C++ 中触发 COM 事件 - 同步还是异步?

我有一个使用 MS ATL 库编写的 ActiveX 控件,我正在通过pDispatch->Invoke(..., DISPATCH_METHOD). 该控件将由 .NET 客户端使用,我的问题是 - 事件的触发是同步调用还是异步调用?我担心的是,如果是同步的,处理事件的应用程序可能会导致性能问题,除非它立即返回。

0 投票
2 回答
401 浏览

com - 使用 COM 互操作处理对象生命周期的最有效方法是什么?

我有一个 Windows 工作流应用程序,它使用我为 COM 自动化编写的类。我正在使用 COM 从我的课程中打开 Word 和 Excel。

我目前正在我的 COM 助手中实现 IDisposable 并使用 Marshal.ReleaseComObject()。但是,如果我的工作流程失败,则不会调用 Dispose() 方法,并且 Word 或 Excel 句柄保持打开状态并且我的应用程序挂起。

这个问题的解决方案非常简单,但不仅仅是解决它,我想学习一些东西并深入了解使用 COM 的正确方法。我正在寻找“最佳”或最有效和最安全的方式来处理拥有 COM 句柄的类的生命周期。模式、最佳实践或示例代码会有所帮助。

0 投票
4 回答
10558 浏览

c# - C# COM 办公自动化 - RPC_E_SYS_CALL_FAILED

我正在编写一个充当 PowerPoint 2007 插件的 C# 程序。在某些机器上,对 PowerPoint 对象模型的某些调用会抛出COMException带有消息的RPC_E_SYS_CALL_FAILED。我找不到任何关于如何处理此错误或如何避免它的具体建议。从谷歌搜索来看,它看起来与消息队列或单线程公寓有关。还是我走远了?

错误消息的示例是:

系统调用失败。(来自 HRESULT 的异常:0x80010100 (RPC_E_SYS_CALL_FAILED))
在 Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName()

不幸的是,问题发生在客户端的机器上,所以我没有简单的方法来调试它!每当我收到此错误时,我是否应该重试呼叫?

任何帮助我解决这个问题的建议将不胜感激!

0 投票
2 回答
505 浏览

com - 如何确定非托管代码使用的内存量

我正在处理一个大型 COM 库 (ArcObjects),并且我正在尝试查明内存泄漏。
确定非托管代码/对象使用的内存量的最可靠方法是什么。
可以使用哪些性能计数器?

0 投票
1 回答
1412 浏览

c++ - QDrag 在拖动时被破坏

我有一个在 QTreeView 中使用拖放的 Windows/Linux Qt 4.3 应用程序。我有两个非常相似的应用程序,它们使用相同的 Qt 库集。拖放在 Linux 上都适用,但在 Windows 上只适用于其中之一。

在不工作的应用程序中,一旦鼠标移动,QDrag 对象就会被删除。它被事件队列中的 DeferredDelete 事件删除,该事件队列在拖动期间仍在 Qt 中处理。我不知道如何查看导致 QDrag 对象过早删除的原因。

我想不出调试这个问题的好方法。我已经比较了来源,找不到任何明显的东西。我曾尝试在另一个应用程序中使用其中一个应用程序的代码。

有什么建议么?

更新:

QDrag 操作失败的原因是 COM 没有成功初始化,所以 QDrag::exec 中对 DoDragDrop 的调用立即返回。QApplication 尝试通过在 qt_init 中调用 OleInitialize 来初始化 COM,但失败并出现错误“设置后无法更改线程模式”。

有趣的是,即使 OleInitialize 是在 main 中完成的第一件事,也会发生这种情况,因此线程模式最初是由某些外部依赖项设置的。在 Windows 上运行的应用程序之间的区别之一是失败的应用程序还包含 .NET 代码,所以这可能就是问题所在。

解决了:

此问题是 COM/CLR 互操作问题。CLR 在初始化时将单元状态设置为 MTA,然后当 Qt 尝试初始化 COM 时失败。Adam NathanGotcha 中使用 STAThreadAttribute 和 Managed C++讨论了这个问题和一个旧的解决方案。在 Visual Studio 2005 中,您可以在Configuration Properties > Linker > Advanced中设置/CLRTHREADATTRIBUTE:STA 编译器选项,将线程属性设置为 STA,而无需创建新的入口点。

0 投票
1 回答
3271 浏览

c# - 如何在 Windows 安装程序包添加的注册表项中引用 GAC 中程序集的路径?

我有一个 .NET 程序集,其中包含要通过 EnterpriseServices (COM+) 注册为 ServicedComponent 并由第三方应用程序通过 COM RPC 调用的类。因此,我需要将它添加到 GAC 并HKEY_CLASSES_ROOT\CLSID\{clsid}\CodeBase在 GAC 文件夹中的程序集 DLL 路径下添加一个注册表项。(我不能依赖 regsvcs 来做,因为这是一个 32 位的程序集 --- 它依赖于 32 位的第三方组件 --- 而我之前提到的第三方应用程序看不到类Wow6432Node)

所以问题是:

要在 GAC 中创建的程序集的路径,或者至少是 GAC 文件夹本身的路径,是否可以在 Windows Installer 中作为可用于注册表项值等的属性?

0 投票
1 回答
219 浏览

.net - 用 .NET 编写的单元测试 COM

有没有办法从 .NET 对 COM 可见的 .NET 程序集进行单元测试(而不是通过直接的 .NET 程序集引用)?当我在我的测试项目中添加对 .NET 中的 COM 组件的引用时,它会抱怨。