首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows中实际使用抽象类/接口?

如何在Windows中实际使用抽象类/接口?
EN

Stack Overflow用户
提问于 2022-10-28 12:39:41
回答 1查看 106关注 0票数 -2

我知道在C++中没有真正内置的接口概念,因此为了实现它,必须使用抽象类,它只包含纯虚拟函数

现在,在Microsoft的API列表中,一些类(如IPropertyStorageIPropertyStorageIStorage )是接口(最初由I表示)。

因为它们是接口/抽象类,所以它们需要子类或继承,我才能真正使用它们。令我困惑的是,每个类都有执行某些事情的成员方法,这是否意味着我需要重写这些方法?

中的一些方法:

考虑到我需要对接口进行子类化,我尝试了下面的代码,但似乎我对子类的理解是错误的:

代码语言:javascript
复制
#include <iostream>
#include <propidl.h>
#include <objidl.h>

class PropertyStorage : IPropertyStorage {};

int main(int argc, char* argv[]){

    PropertyStorage ips();   <- function returning abstract class "PropertyStorage" is not allowed

}

说了这些话之后,我想重申

我的问题是:,您如何实际使用Microsoft中的接口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-28 13:42:02

您如何实际使用来自Microsoft的API的接口?

这很简单:获得一个指向接口的指针,然后开始使用它。当做完后,你Release()它。简单地说就是COM。

接下来是一个更棘手的问题:您如何实际获得COM接口指针?基本上,有两种方法可以做到这一点:

  1. 调用通过接口指针提供COM对象的工厂函数。“标准”方法是调用CoCreateInstance。不那么“标准”(尽管越来越普遍)的方法是调用专用的工厂函数。例如,要获得IPropertyStorage接口,可以调用StgCreatePropStg (或类似的)。 这解决了使用系统(或库)为客户端使用的COM接口的用例。
  2. 实现接口,并使用您认为合适的任何方法来实例化这个具体的实现。当使用支持COM的C++编译器(如MSVC)时,这相当于为从接口派生的类提供了实现。 这对于您需要创建一个接口(通常由其他人使用)的情况是有用的。例子包括IStreamIEnumString。对于问题中要求的接口来说,情况并非如此。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74235569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档