从 VS2012 在 C++ 中使用 ATL 创建 COM
Posted
技术标签:
【中文标题】从 VS2012 在 C++ 中使用 ATL 创建 COM【英文标题】:Creating COM using ATL in C++ from VS2012 【发布时间】:2016-01-17 14:35:03 【问题描述】:尝试在 Visual Studio 2012 中使用 ATL 创建简单的 COM 库。 我愿意:
New ATL Project
Welcome to the ATL Project Wizard
Next
Application Settings - no change (DLL)
Next
Finish
有很多文件:
试图了解在哪里添加可以由 COM 用户调用的简单函数。我发现只有一个地方可以使用向导添加功能:
但是我发现那里缺少一些关于参数选择的东西,比如 in、out、retval。
我希望在添加新功能后,至少 IDL 文件也会更新,但这并没有发生。
VS2012 的 Visual C++ 使用 ATL 创建简单 COM 类的方法是什么?
【问题讨论】:
手动编写 IDL,然后更新类以匹配。 COM 方法通过接口公开,这些接口由对象实现。您需要先使用类似的向导添加对象(添加 ATL 简单对象)。然后向接口添加方法,这些方法将为您创建。 【参考方案1】:添加一个新类
填写字段
在这一步之后SomeObject.h
,SomeObject.cpp
文件将被创建并添加到您的解决方案中,ISomeObject
接口声明将被添加到.idl
文件中。
进入类视图(默认组合ctrl+shift+C),选择ISomeObject
,添加新方法
填写字段
在这一步之后,someMethod
将被添加到 .idl
文件、.h
文件和 .cpp
文件中。您所要做的就是在.cpp
文件中编写someMethod
的实现。
【讨论】:
我已经使用您的推荐创建了 dll 并在 32 位 WinXP 操作系统中注册了 wit regsvr32,但我找不到它的注册信息。我使用来自 powershellmagazine.com/2013/06/27/… 的 PowerShell 脚本 它在HKEY_CLASSES_ROOT\ATLProject1.SomeProject.1
键中。 PS1 脚本不正确。它应该匹配^\w+\.\w+(?:$|.\d+)
。
好的,我有ATLProject1.SomeProject.1
。我想ATLProject1.SomeProject
是我们在 ProgID 中输入的,但最后的 1
是什么意思?
表示COM对象的版本。 ATLProject1.SomeProject\CurVer = ATLProject1.SomeProject.1
,ATLProject1.SomeProject.1\CLSID = GUID
。因此,可以在脚本中创建像 var o = new ActiveXObject('ATLProject1.SomeProject');
这样的对象,并且您已经获得了 COM 对象的实际(当前)版本。以上是关于从 VS2012 在 C++ 中使用 ATL 创建 COM的主要内容,如果未能解决你的问题,请参考以下文章
ATL抱怨VS2012后不包括Windows -> VS2017
VS 2010 Build 中的 ATL DCOM 对象创建失败