1. 程式人生 > >如何使用C++建立COM元件(ATL專案)

如何使用C++建立COM元件(ATL專案)

這裡新增的類one就是一個介面,在.cpp中可以實現多個方法。

注意,不要忘記在test.idl檔案中宣告將要暴露出去的方法,one介面的clsid是:59CF380D-5F6C-44A0-BAC0-F81D1ADAE4CD。

[
	object,
	uuid(E2CC7541-888A-439B-BAA8-E144D91CE875),
	dual,
	nonextensible,
	pointer_default(unique)
]
interface Ione : IDispatch{
	[id(1), helpstring("方法SetParam")] HRESULT SetParam([in] LONG param1, [in] char param2);
	[id(2), helpstring("方法GetVersion")] HRESULT GetVersion([out,retval] BSTR* pVal);
};
[
	uuid(FC174988-A41D-4C99-99B4-E3083BA8ED6C),
	version(1.0),
]
library testLib
{
	importlib("stdole2.tlb");
	[
		uuid(59CF380D-5F6C-44A0-BAC0-F81D1ADAE4CD)		
	]
	coclass one
	{
		[default] interface Ione;
	};
};
如果有很多功能,為便於管理,可把所有實現功能的方法分類,一個介面管理一類方法。

呼叫演示

準備工作:

1.把test.dll檔案放在system32(64位系統:SysWOW64)下;

2.通過命令列註冊該dll檔案:regsvr32 test.dll;

3.編輯測試頁面。

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<TITLE>測試頁</TITLE>
</head>
<body>
<OBJECT ID="example"  height="1" width="1" CLASSID="CLSID:
"59CF380D-5F6C-44A0-BAC0-F81D1ADAE4CD"></OBJECT><script> function Info() { tb_result.value = "方法setparam:" + example.SetParam(9, "a") + "\r\n" + "\r\n"; tb_result.value = tb_result.value + "方法getversion:" + example.GerVersion() + "\r\n" + "\r\n";} </script> <input type="button" value="測試" onclick='Info()'/><br />
<textarea name="tb_result" rows="1" cols="20" id="tb_result"style="height:70%;width:70%;"></textarea><br /> </body> </html>