问题标签 [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.
object - COM IUnknown,在调用 CoGetClassObject 之前我是否需要一个指向它的指针?
在 COM 中,当你想创建某个 COM Server 对象的实例时,是否首先需要获取指向它的 IUnknown 接口的指针,然后才能使用 CoGetClassObject 创建一个类对象?
据我了解,IUnknown 是用来管理对象生命周期的,所以据我了解,无论客户想要创建什么对象,首先需要一个指向它的 IUnknown 接口实现的指针。
听起来对吗?如果没有,谁能告诉我它是如何工作的?
c# - 关于 C# 项目中神秘接口的警告
每次构建我的 C# 解决方案时,我都会收到一些关于我从未见过或编写过的接口的警告。我尝试用谷歌搜索其中一些,但没有得到任何点击。这些可能被埋在我引用的程序集中吗?如果是这样,有没有办法让这些警告消失?
接口“IAlertable”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。
接口“ICustomizationPermissionsReports”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。
接口“IAlertable2”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。
delphi - Delphi:如何实现 IUnknown 的 QueryInterface?
在 Delphi 中,IUnknown
声明为:
注意:输出参数是无类型的
在我的TInterfacedObject
后代中我需要处理QueryInterface
,所以我可以返回一个支持请求接口的对象:
问题来了:
德尔福抱怨:
运算符不适用于此操作数类型
显然,我不知道如何或将什么分配给无类型 out
参数。我可以随机尝试,希望编译器不再抱怨:
忽略我编写的所有代码(如果需要):我如何QueryInterface
在一个对象后代中实现TInterfacedObject
?
我一直试图解决的真正问题可以归结为我想要:
我想覆盖接口中的方法
以同样的方式:
可以在后代类中覆盖:
我想对接口也一样:
问题是我必须如何开始加载我的实现对象:
中不仅有两种方法IFoo
,还有 6 种。然后如果我想添加另一个支持的接口:
事情变得非常笨拙非常快。
c++ - 每个新的 COM 类都必须重新实现 IUnknown 接口吗?
对不起,如果这个问题对每个人来说都是显而易见的,但我对 COM 很陌生。从我在这里看到的教程http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567,似乎每个用 C++ 创建的 COM 类都必须实现自己的 QueryInterface、AddRef 和 Release . 由于这些方法对于任何新类都应该具有基本相同的实现,所以我不明白为什么没有一些抽象类或任何为开发人员实现它的东西。我不明白为什么我应该重新实现这么多人已经一次又一次地实现的相同的东西(除非教程是错误的并且有什么东西)。
谢谢
c# - 为什么 IHTMLDocument2 不等于 IHTMLDocument2.body.document?
为什么以下 doc2 与 doc22 不同?
com - IUnknown::QueryInterface() 是否增加引用计数?
如果我有一个,除了在完成后调用之外,IUnknown *ptr
我还需要调用Release()
我通过 获得的每个接口吗?ptr->QueryInterface()
ptr->Release()
ptr
我曾经认为答案是“是”,但MSDN 的这句话让我很困惑:
有时您可能需要获取对对象的弱引用(也就是说,您可能希望在不增加引用计数的情况下获取指向其接口之一的指针),但通过调用
QueryInterface
后跟Release
.
我不明白为什么会有问题——如果我调用ptr->QueryInterface()
然后调用Release
结果指针,对象上的引用计数不应该仍然是正数吗?这如何导致无效指针?
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。
谢谢
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。)
- IUnknown w/o typelib: 不应该工作,接口必须用 C# 显式编写,所以我没有尝试。(由 Hans Passant 在C# 4.0 动态对象和 WinAPI 接口(如 IShellItem)中确认(未在 C# 源代码中定义它们)。)
- IUnknown w/ type lib:我完全不知道它是否有效以及它是如何工作的,因为我没有找到明确的信息。(我将类型库链接到 COM dll,但 DLR 无法绑定方法。)
那么带有 lib 类型的 IUnknown 是否可以与 C# 的动态关键字一起使用?- 如果是这样,我该怎么办?
c++-cli - 在托管 C++ 中表示 IUnknown
我在 C++/CLI 中为 C 静态库构建 Wrapper,以便通过 C# 在 .NET 应用程序中使用
我在C中有这样的功能
如何IUnknown **
在 C++/CLI中声明
对于第一个参数,我使用的是 IntPtr 但无法找到 IUknown 的替换。
我在另一个函数中有另一个 COM 数据类型 GUID,这对我来说也是一个问题。
请帮我找到数据类型 IUnknown 和 GUID 的替换。
delphi - XE2 中的访问冲突强制转换 IDispatch
我们正在使用一些旧代码(由 Binh Ly 创建的 ComLib.pas),因此我们可以在 (OleVariant) 对象上使用枚举接口:
此代码适用于 Delphi 2010 和 2007,但不适用于 XE2。在上面标记的行(带有注释“RAISES EXCEPTION”),我们得到一个异常:
项目 x.exe 引发异常类 $C0000005,并带有消息“0xbaadf00d 处的访问冲突:读取地址 0xbaadf00d”。
传入的对象确实具有 TDispNewEnum 接口,因此不应引发异常(如 Delphi 2010 和 2007 的情况)。
建议?谢谢。