Creating COM using ATL in C++ from VS2012
尝试在 Visual Studio 2012 中使用 ATL 创建简单的 COM 库。
我愿意:
1 2 3 4 5 6
| New ATL Project
Welcome to the ATL Project Wizard
Next
Application Settings - no change (DLL)
Next
Finish |
![enter](//i1.wp.com/i.stack.imgur.com/Xkt4p.png)
有很多文件:
![enter](//i1.wp.com/i.stack.imgur.com/HMDYw.jpg)
试图了解在哪里添加可以由 COM 用户调用的简单函数。我发现只有一个地方可以使用向导添加功能:
![enter](//i1.wp.com/i.stack.imgur.com/Ky1Xh.jpg)
但是我发现那里缺少一些关于参数选择的东西,比如 in、out、retval。
![enter](//i1.wp.com/i.stack.imgur.com/qrnr1.png)
我希望在添加新功能后,至少 IDL 文件也会更新,但这并没有发生。
VS2012 的 Visual C 中的 ATL 创建简单 COM 类的方法是什么?
- 手动编写 IDL,然后更新类以匹配。
-
COM 方法通过接口公开,这些接口由对象实现。您需要先使用类似的向导添加对象(添加 ATL 简单对象)。然后向接口添加方法,这些方法将为您创建。
添加一个新类
![enter](//i1.wp.com/i.stack.imgur.com/YT28D.png)
填写字段
![enter](//i1.wp.com/i.stack.imgur.com/d7eXx.png)
![enter](//i1.wp.com/i.stack.imgur.com/u4JPz.png)
在这一步之后SomeObject.h,SomeObject.cpp文件将被创建并添加到您的解决方案中,ISomeObject接口声明将被添加到.idl文件中。
进入类视图(默认组合ctrl shift C),选择ISomeObject,添加新方法
![enter](//i1.wp.com/i.stack.imgur.com/EWbOJ.png)
填写字段
![enter](//i1.wp.com/i.stack.imgur.com/htghL.png)
在这一步之后,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 对象的实际(当前)版本。