zoukankan      html  css  js  c++  java
  • 手动添加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)
     
  • 相关阅读:
    boost::asio发送与传输相关的几个函数,备忘
    当ASIO::ASYNC_READ与SOCKET的ASYNC_READ_SOME的区别
    boost::asio keepalive
    boost asio ——深入框架
    Boost.Asio和ACE之间关于Socket编程的比较
    OCP-1Z0-052-V8.02-15题
    JavaScript对象和数组
    Oracle 11g New 使用RMAN 增强功能
    Flex中集合的类型
    Flex中基于列表的一系列MX组件及相互关系
  • 原文地址:https://www.cnblogs.com/LinuxHunter/p/1926865.html
Copyright © 2011-2022 走看看