手动添加COM接口

1.手动添加COM接口说明,例如

[

	object,

	uuid(A7A5F961-2D82-4A85-8919-F3E23B0764D5),

	dual,

	helpstring("IMySample 接口"),

	pointer_default(unique)

]

interface IMySample : IDispatch{

	[, helpstring("方法Test")] HRESULT Test();

};
 
2.手动添加COM类,例如
[

	uuid(2AC8F176-ACCB-46B0-B8B7-EBBDF06C415A),

	version(1.0),

]

library TestComLib:

{

	importlib("stdole2.tlb");

	[

		uuid(0DFAFCD4-2343-4AC1-9ED8-B1C773E05A31),

		helpstring("MySample Class")

	]

	coclass MySample                 //添加COM类

	{

		[default] interface IMySample;

	}

};
 
3.添加MySample.rgs脚本,内容类似如下:
HKCR

{

	NoRemove CLSID

	{

		ForceRemove {0DFAFCD4-2343-4AC1-9ED8-B1C773E05A31} = s 'MySample Class' //COM类GUID

		{

			ForceRemove Programmable

			InprocServer32 = s '%MODULE%'

			{

				val ThreadingModel = s 'Both'

			}

			TypeLib = s '{2AC8F176-ACCB-46B0-B8B7-EBBDF06C415A}' //类型库GUID

			Version = s '1.0'

		}

	}

}

4.在resource.h文件中添加如下行:
#define IDR_MYSAMPLE    102

5.打开.rc文件,添加如下行:
IDR_MYSAMPLE REGISTRY "MySample.rgs"
 
6.在实现COM类的类体中加入如下红色标记的代码:
class ATL_NO_VTABLE CMySample :

	public CComObjectRootEx<CComMultiThreadModel>,

	public CComCoClass<CMySample, &CLSID_MySample>,

	public IDispatchImpl<IMySample, &IID_IMySample, &LIBID_TestComLib, /*wMajor =*/ 1, /*wMinor =*/ 0>

{

public:

	CMySample()

	{

	}



	DECLARE_REGISTRY_RESOURCEID(IDR_MYSAMPLE)





	BEGIN_COM_MAP(CMySample)

		COM_INTERFACE_ENTRY(IMySample)

		COM_INTERFACE_ENTRY(IDispatch)

	END_COM_MAP()







	DECLARE_PROTECT_FINAL_CONSTRUCT()



	HRESULT FinalConstruct()

	{

		return S_OK;

	}



	void FinalRelease()

	{

	}



public:

	STDMETHOD(Test)()

	{

		return S_OK;

	}





};



OBJECT_ENTRY_AUTO(__uuidof(MySample), CMySample)
 

你可能感兴趣的:(com)