windows 平台很早就提供了一种组件编程模型COM(Component Object Model), 他定义了一个固定模型,包括server和client两部分,使用户可以方便的集成采用该模型的组件。
在virtual camera项目中,我们需要使用directshow 编写一个source filter, 而directshow规定所有的fitler必须使用com方式实现。所以,我们首先需要看一下如何创建一个COM项目。
打开visual studio 2019, 选择创建新项目:
![](https://img.haomeiwen.com/i13099157/484297d282fa7963.png)
在选择模板处,我们选择ATL 项目:
![](https://img.haomeiwen.com/i13099157/751f06c8fe986ff3.png)
ATL 项目定义了很多模板,将简化COM组件的开发。
点击下一步,填写项目名称和项目位置,解决方案名称默认和第一个项目名称同名:
![](https://img.haomeiwen.com/i13099157/e382528bfd2f3c4a.png)
点击创建,选择COM项目属性:
我们将采用动态链接库(dll)的方式实现项目,不存在跨进程和跨机器的场景,其它保持默认。
![](https://img.haomeiwen.com/i13099157/233155757cda10f6.png)
点击确认完成项目的创建:
![](https://img.haomeiwen.com/i13099157/c74ed77c8f4f05c8.png)
默认创建成功的项目中,包含了由项目模板自动生成和创建的开发com组件必须的文件。
现在我们需要黄健一个对象,每一个com组件中都包含一个或多个对象,每一个对象向用户提供一个或多个接口,每一个接口定义了用户可以调用的方法,这就是COM接口模型的逻辑。
右击项目,选择“添加” ->“模块”,打开模块添加向导:
![](https://img.haomeiwen.com/i13099157/6af13359842afe67.png)
我们选择ATL ->ATL简单对象,点击添加,打开ATL简单对象模板向导:
![](https://img.haomeiwen.com/i13099157/26826c7834b3f30b.png)
在名称页,我们创建一个ICameraOjbect, groupID填写为项目名加对象名。
![](https://img.haomeiwen.com/i13099157/d66f3cf50783d4f6.png)
点击“其它”,默认线程选择"单元(department)", 接口选择“自定义(custom)”, 其它选择默认:
![](https://img.haomeiwen.com/i13099157/ba0429c6bd19b5fd.png)
点击“完成”,结束对象的创建,创建成功后,打开“视图”->“类视图”,我们将看到自己创建的接口以及实现类CICameraObject:
![](https://img.haomeiwen.com/i13099157/30342dd8abbcde4b.png)
可以看到通过ATL生成了com接口IICameraOjbect,现在我们可以像这个接口添加自定的方法,右击IICameraObject,选择“添加”->“添加方法”:
![](https://img.haomeiwen.com/i13099157/1d5544fbc42071e8.png)
点击确认后,该方法将被自动添加到接口和实现类中。打开ICameraObject.cpp, 就可以开始实现自定义方法了:
![](https://img.haomeiwen.com/i13099157/1b899217ba6ecd84.png)
现在,我们使用visual studio 2019的ATL 项目模板,初始化了ICamera的COM Server端项目,我们点击“生成” ->" 生成解决方案",完成项目的初次build(需要以管理员身份打开visual studio 2019, 否则会报注册失败的错误)。
![](https://img.haomeiwen.com/i13099157/c972af6ce9bf232c.png)
网友评论