问题标签 [iunknown]

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 回答
527 浏览

object - COM IUnknown,在调用 CoGetClassObject 之前我是否需要一个指向它的指针?

在 COM 中,当你想创建某个 COM Server 对象的实例时,是否首先需要获取指向它的 IUnknown 接口的指针,然后才能使用 CoGetClassObject 创建一个类对象?

据我了解,IUnknown 是用来管理对象生命周期的,所以据我了解,无论客户想要创建什么对象,首先需要一个指向它的 IUnknown 接口实现的指针。

听起来对吗?如果没有,谁能告诉我它是如何工作的?

0 投票
2 回答
1877 浏览

c# - 关于 C# 项目中神秘接口的警告

每次构建我的 C# 解决方案时,我都会收到一些关于我从未见过或编写过的接口的警告。我尝试用谷歌搜索其中一些,但没有得到任何点击。这些可能被埋在我引用的程序集中吗?如果是这样,有没有办法让这些警告消失?

接口“IAlertable”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。

接口“ICustomizationPermissionsReports”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。

接口“IAlertable2”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。

0 投票
3 回答
8992 浏览

delphi - Delphi:如何实现 IUnknown 的 QueryInterface?

在 Delphi 中,IUnknown声明为:

注意:输出参数是无类型的

在我的TInterfacedObject后代中我需要处理QueryInterface,所以我可以返回一个支持请求接口的对象:

问题来了:

德尔福抱怨:

运算符不适用于此操作数类型

显然,我不知道如何或将什么分配给无类型 out参数。我可以随机尝试,希望编译器不再抱怨:

忽略我编写的所有代码(如果需要):我如何QueryInterface在一个对象后代中实现TInterfacedObject


我一直试图解决的真正问题可以归结为我想要:

我想覆盖接口中的方法

以同样的方式:

可以在后代类中覆盖:

我想对接口也一样:

问题是我必须如何开始加载我的实现对象:

中不仅有两种方法IFoo,还有 6 种。然后如果我想添加另一个支持的接口:

事情变得非常笨拙非常快。

0 投票
3 回答
2959 浏览

c++ - 每个新的 COM 类都必须重新实现 IUnknown 接口吗?

对不起,如果这个问题对每个人来说都是显而易见的,但我对 COM 很陌生。从我在这里看到的教程http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567,似乎每个用 C++ 创建的 COM 类都必须实现自己的 QueryInterface、AddRef 和 Release . 由于这些方法对于任何新类都应该具有基本相同的实现,所以我不明白为什么没有一些抽象类或任何为开发人员实现它的东西。我不明白为什么我应该重新实现这么多人已经一次又一次地实现的相同的东西(除非教程是错误的并且有什么东西)。

谢谢

0 投票
1 回答
849 浏览

c# - 为什么 IHTMLDocument2 不等于 IHTMLDocument2.body.document?

为什么以下 doc2 与 doc22 不同?

0 投票
4 回答
4336 浏览

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

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

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

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

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

0 投票
1 回答
719 浏览

com - 如何管理.Net的RCW COM对象创建参数(即请求接口)?

我在我的 C# .NET 应用程序中使用外部本机 COM 组件。

这个 COM DLL 没有类型库,所以我必须自己编写互操作代码,并且拥有 include/idl 文件,我像 TlbImp 那样做。但最糟糕的是对象创建失败:

如果我使用本机CoCreateInstance并指定class_id实现的接口 IID 之一,则最终创建该类。

事实证明,问题在于 COM 对象IClassFactory::CreateInstance不支持IID_IUnknown作为参数传递riid,因此返回CLASS_E_CLASSNOTAVAILABLE(我用反汇编器和调试器识别它)。该组件是 MS SQL VDI。

有什么方法可以强制 .NET RCW 将不同的接口 ID 传递给CreateInstance方法而不是IID_IUnknown? 我在网上搜索了很多,但没有找到解决方案。

作为一种解决方法,我现在使用 C++/CLI 来创建对象,请求正确的接口而不是IID_IUnknown现在用于此目的;但我想用 C# 编写代码,因为 C++/CLI 要求我为每个平台构建不同的 DLL。

谢谢

0 投票
1 回答
232 浏览

c#-4.0 - 动态是否适用于 IUnknown 和 Typelib

目前我正在试验 C#4 的动态编程,但我并不完全理解关键字 dynamic 在什么情况下有效。我很清楚它可以与 IDispatch 一起使用,因为它允许自动向调用者通知类型信息。但它不应该也适用于 IUnknown 和类型库吗?(在http://samgentile.com/Web/vs2010-and-net-framework-4-0/c-4-0-bcl-4-series-dynamic-primitive-type-part-1/我发现了一个模糊的提示应该可以绑定到 IUnknown。)

那么带有 lib 类型的 IUnknown 是否可以与 C# 的动态关键字一起使用?- 如果是这样,我该怎么办?

0 投票
3 回答
777 浏览

c++-cli - 在托管 C++ 中表示 IUnknown

我在 C++/CLI 中为 C 静态库构建 Wrapper,以便通过 C# 在 .NET 应用程序中使用

我在C中有这样的功能

如何IUnknown **在 C++/CLI中声明

对于第一个参数,我使用的是 IntPtr 但无法找到 IUknown 的替换。

我在另一个函数中有另一个 COM 数据类型 GUID,这对我来说也是一个问题。

请帮我找到数据类型 IUnknown 和 GUID 的替换。

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 的情况)。

建议?谢谢。