COM双接口
COM中的双接口是能够通过DispInterface或通过VTable方法访问的接口。COM双接口
现在有人可以告诉我两种方法的区别究竟是什么?
我以为VTable是一个虚拟表,当实现一个具有虚拟函数并可以在子类中重写的类层次结构时,该虚表包含指向不同函数的指针。但是我不明白这与COM中的双接口有什么关系?
回答:
简而言之,COM是二进制规范,而不是语言规范。双接口和代码中派生类之间确实没有关联。苹果和桔子。
该VTable是“早绑定”,因此这更快。你知道你在编译时调用的方法的类型。
使用DispInterface是“后期限制”,因此速度较慢,但更灵活。它广泛用于脚本编写。方法和属性类型在运行时确定。
我希望这个简短的解释有帮助。
回答:
主要区别在于调用对象方法。如果DispInterface调用通过IDispatch :: Invoke方法(用于脚本或缺少接口说明),请参阅remarks。这种方法第二种选择要慢得多。在第二种情况下,直接使用VTable进行方法调用(用于C++或.NET语言的调用)
回答:
我只想回答Tony的其他问题。
如果你想创建一个可以从VBScript/JScript或从旧的“经典”ASP访问的COM,你必须实现IDispatch。
在Visual Basic 6或MS Office的VBA中,可以使用两种方法。如果你添加引用到你的COM,那么你将使用“早期绑定”(IUnknown或VTable)。如果您在VB6或VBA中使用您的COM与CreateObject(“ProgIdName”),您将使用“迟到”。
理解,使COM可以从VB6/VBA等访问是非常重要的。仅仅实现IUnknown接口是不够的。您必须创建并注册类型库与oleautomation
属性。为了做到这一点,您可以在您的COM接口中只使用oleautomation
兼容的数据类型(请参阅http://msdn.microsoft.com/en-us/library/aa367129%28VS.85%29.aspx)。为了理解类型库扮演客户端编组DLL的角色,所以它帮助像VB6/VBA这样的客户端软件将数据作为参数正确地发送到您的COM。你不应该忘记,即使你的COM将是一个InProc服务器,一个DLL,参数将不会直接转发给COM,而是需要编组。在编组期间,将在运行COM的线程上创建数据副本。它使您的COM DLL线程从一侧安全,如果调用COM方法的线程在COM返回值之前结束,您的COM将不会崩溃。
大概我对封送处理的解释并不容易,但它很重要,不要忘记创建并注册类型库,它更适合作为资源保存在COM中。
以上是 COM双接口 的全部内容, 来源链接: utcz.com/qa/261530.html