C++手动实现 com

本文详细介绍了如何在C++中手动实现COM(组件对象模型)接口,通过SCPIImp.h头文件的解析,展示了COM接口的定义和实现过程。
摘要由CSDN通过智能技术生成
#pragma once
#include "unknwn.h"
class SCPIFactory :public IClassFactory
{
public:
 SCPIFactory(void);
 ~SCPIFactory(void);
public:
 //IUnknow Method
 STDMETHODIMP QueryInterface(REFIID,void**);
 STDMETHODIMP_(ULONG) AddRef();
 STDMETHODIMP_(ULONG) Release();
 //IClassFactory Method
 STDMETHODIMP CreateInstance(IUnknown * ,REFIID ,void **);
 STDMETHODIMP LockServer(BOOL fLock);
private:
 LONG m_cRef;
};

import "oaidl.idl";import "ocidl.idl";[uuid(011E50FF-873E-4FB2-86D5-296BFFCB47C4),object, dual,//这个标识说明定义的是双接口pointer_default(unique)]interface ISCPI : IDispatch//必须从IDispatch接口派生{[id(1)]HRESULT add([in]int a, [in]int b, [out]int* c);};[uuid(681B4072-519F-43B2-A356-055CD5B9FFC1),version(1.0),]library SCPILib{importlib("stdole32.tlb");importlib("stdole2.tlb");[uuid(050779DB-3DF0-49C4-9CCF-C92BD363DB82)]coclass SCPIImp//com类{[default] interface ISCPI;};};

SCPIX.idl

SCPIImp.h

#pragma once
#include "SCPI_h.h"

class SCPIImp :public ISCPI
{
public:
	SCPIImp(void);
	~SCPIImp(void);

public:

	//IUnknown接口
	STDMETHOD(QueryInterface)(REFIID riid, void **ppv);//接口查询
	STDMETHOD_(ULONG, AddRef)();//增加一个引用
	STDMETHOD_(ULONG, Release)();//减少一个引用

	// IDispatch
	STDMETHOD(GetTypeInfoCount)(UINT * pit);
	STDMETHOD(GetTypeInfo)(UINT it,LCID lcid,ITypeInfo **ppti);
	STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR ** pNames, UINT nNames, LCID lcid, DISPID * pdispids);
	STDMETHOD(Invoke)(DISPID id, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pd, VARIANT * pVarResult, EXCEPINFO * pe, UINT *pu);

	//ISCPI
	STDMETHOD(add)(int a, int b, int *c);

private:
	ULONG m_cRef; //引用计数
};

SCPImp.cpp
#include "SCPIImp.h"


SCPIImp::SCPIImp(void)
{
	m_cRef = 0;
}


SCPIImp::~SCPIIm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值