一、创建COM组件
- VS2022选择ATL创建项目,勾上允许合并代理/存根代码

- 创建完成,查看各个自动生成的文件,大致了解一下各个文件的作用。

- 选择项目右击新建项。

- 选择ATL简单对象,输入类名称MATH,在这个类里面我们会写上我们自己要实现功能的代码

- 创建完成,设置项目属性逐用户重定向为是,生成项目。

6.进入类视图,用VS自带的功能给刚刚新建的类添加方法和属性。



- 把刚刚创建的方法代码补全。

STDMETHODIMP CMath::get_radius(DOUBLE* pVal)
{
*pVal = m_radius;
return S_OK;
}
STDMETHODIMP CMath::put_radius(DOUBLE newVal)
{
m_radius = newVal;
return S_OK;
}
STDMETHODIMP CMath::GetArea(DOUBLE* Area)
{
double area = 3.1415926 * m_radius * m_radius;
*Area = area;
return S_OK;
}
- 完成之后生成项目,COM的创建就到此结束了。
二、注册COM组件
- 注册bat
regsvr32 E:\OUT\MathLib\x64\Debug\MathLib.dll
- 取消注册bat
regsvr32 /u E:\OUT\MathLib\x64\Debug\MathLib.dll
- 以管理员权限运行注册bat,看到如下弹框表示注册成功

三、调用COM组件
- 新建一个控制台项目

- 拷贝这两个文件MathLib_i.c和MathLib_i.h到控制台项目中,并把他们添加到项目里面。


3. 编写调用代码
#include <Windows.h>
#include <objbase.h>
#include <iostream>
#include "MathLib_i.h"
int main()
{
CoInitialize(NULL);
IMath* pMath = NULL;
HRESULT hr = CoCreateInstance(CLSID_Math, NULL, CLSCTX_INPROC_SERVER, IID_IMath, (void**)&pMath);
if (SUCCEEDED(hr))
{
pMath->put_radius(5);
double area = 0;
pMath->GetArea(&area);
std::cout << "Area: " << area << std::endl;
}
CoUninitialize();
}
4、运行结果如下表示成功了

四、附件
VS项目地址::https://download.csdn.net/download/litterCooker/89709579



48

被折叠的 条评论
为什么被折叠?



