问题标签 [queryinterface]

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 投票
3 回答
317 浏览

delphi - 有没有其他人在 Delphi 中使用 QueryInterface 注意到这种行为?

这是我的类型...

这是我运行示例的代码...

似乎在第一次调用 QueryInterface 时,即使我们为“f”变量分配了错误类型的接口,它仍然会尝试执行它所指向的任何东西的“第一个”方法,而不是与名称“TestFoo1”。使用 f := fb 可以按预期工作,那么我们是否有理由使用 QueryInterface 而不是语法 f := fb?

0 投票
2 回答
1007 浏览

ruby-on-rails - 如何在 Rails 3 中制作“will_paginate”延迟加载?

在 rails3 中,现在几乎所有的查询接口都变成了延迟加载,但是 'will_paginate' 会在你使用 'paginate' 方法后立即访问数据库。我怎样才能使它延迟加载记录?

0 投票
2 回答
3633 浏览

c++ - 什么是 IconnectionPoint 和 EventHandling

试图了解它是什么IConnectionPoint以及它是如何连接到IConnectionPointContainer,IEnumConnectionPoints,IEnumConnectionsEventHandling

阅读MSDNCodeProject的文章,这些文章解释了其他方法,例如:QueryInterface()和其他东西。

我无法弄清楚所有这些东西(IConnectionPointContainer,IEnumConnectionPoints,IEnumConnections)是如何相互关联的以及事件处理。

我只想创建一个 simpleClient 来触发 COM 对象中的事件。

如果有任何文章或代码片段可以用简单而小块的代码来解释事物之间的关系,将会很有帮助。

值得一提的是,我最近开始用 C 开发,一个初学者。

编辑@sharptooth

换行“ typically your client will receive events and the COM object will trigger those events.

从许多文章中,我的理解是当我们在那时使用连接点时, the client exposes a set of methods that the server uses.

我只是概述了来自TechRepublich 的文章的一部分:

客户端服务器与接收源

因此,在标准客户端-服务器系统中使用 COM 进行正常编程与使用连接点之间的主要区别在于,在标准客户端-服务器情况下,服务器公开客户端使用的方法列表,而在连接点情况下,客户端公开了一组服务器使用的方法。

0 投票
1 回答
481 浏览

.net - 如何为 .NET 3.5 执行自定义查询接口?

我将 .NET 程序集暴露给 COM,并且我想创建一个自定义 QueryInterface,否则我的类将不得不实现很多接口。

目前我的实现是这样的

我希望我的类不实现这些接口,但是当调用 QueryInterface 以返回实现所请求接口的对象时。我知道 .NET 框架 4.0 存在此功能(请参阅ICustomQueryInterface)不幸的是我需要在 3.5 中执行此操作

0 投票
1 回答
1124 浏览

python - Python、ArcObjects 和 .AppRef:如何从 IAppROT 到 IMxDocument?

我正在编写一个外部 Python/comtypes 脚本(在 PythonWin 中),它需要获取对当前 ArcGIS 10.0 ArcMap 会话的引用(通过 ArcObjects COM)。因为脚本在应用程序边界之外,所以我通过 AppROT(运行对象表)获取应用程序引用。下面的第一个代码片段是主要的 Python 驱动程序模块。其中有一个 GetApp() 函数,用于从 AppROT 中获取应用程序引用。此代码工作正常,并在单例 AppRef 对象上返回 IApplication。有道理,这就是 ArcObjects 参考似乎表明的。现在,我的主要目标是获得一个 IMxDocument。在主循环中,我成功获得了一个 IDocument 并可以打印标题。但是,下一行查询接口会引发错误 - NameError: name 'esriArcMapUI' is not defined。即使在关闭 PythonWin 并重新打开之后(您总是想在断定您有问题之前尝试),该错误也会持续发生。[顺便说一句,第二个代码片段是 QI 的 CType() 函数,在 SignHelpers.py 模块中定义和导入。] 所以,这是我的问题:

(1) IDocument 在什么 COM 对象上?
(2) 如何从我的 IDocument 获取到预期的 IMxDocument?我需要先创建一个新的 MxDocument 对象吗?[对不起。那里有两个问题。]
(3) 如果我不必创建新对象,那么我该如何做 QI?

几年前,我在 VB6 中做了很多 ArcObjects 工作,所以现在明确的 QI 和命名空间正在给我带来麻烦。一旦我可以访问 IMxDocument,我就可以自由回家了。我将不胜感激任何人都可以为此提供帮助。

另外,对于下面代码的格式,我深表歉意。我不知道如何让 Python 代码正确格式化。缩进不起作用,一些 Python 代码被解释为格式化字符。

0 投票
3 回答
11148 浏览

c++ - Why is every successful QueryInterface() call followed by Release() call?

Why is a QueryInterface() call always followed by a Release() call? For example, I have seen a sample code from MSDN as below:

can someone explain the intent behind Release() call here?

0 投票
1 回答
3908 浏览

api - 使用 RFCOMAPIlib (RightFax COM API):无法转换 COM 对象

我正在使用 RightFax COM API。我想做的只是发送带有附件的传真。简单吧?这个问题已经回答过几次了。但是,当我在我的应用程序中使用其中的一些代码时,我遇到了一些麻烦。

应用程序:RightFax 9.4
语言:C#(ASP.NET 应用程序)
IDE:MS Visual Web Dev。Express
目标框架:.NET 3.5
操作系统:Windows 7

我什至没有通过服务器的名称。

异常详细信息:
无法将“RFCOMAPILib.FaxServerClass”类型的 COM 对象转换为接口类型“RFCOMAPILib.Form”。此操作失败,因为 IID 为“{9F386618-764B-48F8-A5BF-3682B03DE840}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

所以。有什么建议么?

0 投票
4 回答
4336 浏览

com - IUnknown::QueryInterface() 是否增加引用计数?

如果我有一个,除了在完成后调用之外,IUnknown *ptr我还需要调用Release()我通过 获得的每个接口吗?ptr->QueryInterface()ptr->Release()ptr

我曾经认为答案是“是”,但MSDN 的这句话让我很困惑:

有时您可能需要获取对对象的弱引用(也就是说,您可能希望在不增加引用计数的情况下获取指向其接口之一的指针),但通过调用QueryInterface后跟Release.

我不明白为什么会有问题——如果我调用ptr->QueryInterface()然后调用Release结果指针,对象上的引用计数不应该仍然是正数吗?这如何导致无效指针?

0 投票
1 回答
1440 浏览

delphi - XE2 中的访问冲突强制转换 IDispatch

我们正在使用一些旧代码(由 Binh Ly 创建的 ComLib.pas),因此我们可以在 (OleVariant) 对象上使用枚举接口:

此代码适用于 Delphi 2010 和 2007,但不适用于 XE2。在上面标记的行(带有注释“RAISES EXCEPTION”),我们得到一个异常:

项目 x.exe 引发异常类 $C0000005,并带有消息“0xbaadf00d 处的访问冲突:读取地址 0xbaadf00d”。

传入的对象确实具有 TDispNewEnum 接口,因此不应引发异常(如 Delphi 2010 和 2007 的情况)。

建议?谢谢。

0 投票
3 回答
7081 浏览

com - 如何在 COM 对象上查询 Powershell 接口

我使用 Powershell 创建了一个 COM 对象:

然后我需要查询该"MyLib.MyInterface"对象的接口,但我不知道如何使用 PowerShell 来完成。

换句话说,假设我有以下 C++ 代码

我如何使用 Powershell 完成相同的工作

任何意见?

谢谢