VS2022创建COM组件并且调用(1)

一、创建COM组件

  1. VS2022选择ATL创建项目,勾上允许合并代理/存根代码
    新建项目
  2. 创建完成,查看各个自动生成的文件,大致了解一下各个文件的作用。
    在这里插入图片描述
  3. 选择项目右击新建项。
    在这里插入图片描述
  4. 选择ATL简单对象,输入类名称MATH,在这个类里面我们会写上我们自己要实现功能的代码
    在这里插入图片描述
  5. 创建完成,设置项目属性逐用户重定向为是,生成项目。
    在这里插入图片描述

6.进入类视图,用VS自带的功能给刚刚新建的类添加方法和属性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 把刚刚创建的方法代码补全。
    在这里插入图片描述
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;
}

  1. 完成之后生成项目,COM的创建就到此结束了。

二、注册COM组件

  1. 注册bat
regsvr32 E:\OUT\MathLib\x64\Debug\MathLib.dll
  1. 取消注册bat
regsvr32 /u E:\OUT\MathLib\x64\Debug\MathLib.dll
  1. 以管理员权限运行注册bat,看到如下弹框表示注册成功
    在这里插入图片描述

三、调用COM组件

  1. 新建一个控制台项目

在这里插入图片描述

  1. 拷贝这两个文件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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值