还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

ATL COM开发入门(一)(JS调用ActiveX/COM组件)

来源:清泛原创     2015-11-03 15:50:40    人气:     我有话说( 0 人参与)

ATL(Active Template Library)动态模板库,是一个类库,可以使用它进行COM开发。本文通过一个基础入门的例子,简要介绍如何定义、实现C...

ATL(Active Template Library)动态模板库,是一个类库,可以使用它进行COM开发。本文通过一个基础入门的例子,简要介绍如何定义、实现COM接口,前台如何调用COM接口。

先看例子最终效果:


一、新建项目:



向导完成后,生成的工程源码如下:


二、添加一个ATL对象:AtlDemoIf




添加ATL对象后新增的文件如下:


三、AtlDemoIf对象中添加接口方法:ConcatStr,并定义接口参数



这时,AtlDemo.idl文件中新增了一个接口:

interface IAtlDemoIf : IDispatch{
	[id(1)] HRESULT ConcatStr([in] BSTR* pStr1, [in] BSTR* pStr2, [out,retval] BSTR* pRetStr);
};

AtlDemoIf.h中新增了一个公开成员函数:

STDMETHOD(ConcatStr)(BSTR* pStr1, BSTR* pStr2, BSTR* pRetStr);

AtlDemoIf.cpp中新增了函数体:

STDMETHODIMP CAtlDemoIf::ConcatStr(BSTR* pStr1, BSTR* pStr2, BSTR* pRetStr)
{
	CString retStr;
	retStr.Format(_T("%s%s"), *pStr1, *pStr2);
	*pRetStr = retStr.AllocSysString();

	return S_OK;
}


四、写一个简单的html网页进行测试:

<HTML>
<HEAD>
<TITLE>COM接口测试页</TITLE>
<script type="text/javascript">
function Test(){
	var retStr = AtlDemoObj.ConcatStr(document.all.ipt1.value, document.all.ipt2.value);
	alert(retStr);
}
</script>
</HEAD>
<BODY>
<object id="AtlDemoObj" classid="clsid:B0DA2962-C4C3-48CD-BFBC-4F43F9D03C56" width=0 height=0></object>

<input name=ipt1 size=8/> <input name=ipt2 size=8/> <input type="button" value="Test" onclick = "javascript:Test();"/>

</BODY>
</HTML>
注意:clsid使用AtlDemo.idl中importlib下面的uuid,如图:

工程编译后会自动注册COM,没有注册的可使用命令regsvr32 xxx.dll注册,如图:

这时注册表(regedit)中会写入相应的数据:


这时,只能使用IE浏览器打开网页测试,因为只有IE支持COM组件调用,其他内核的浏览器想要实现类似功能可以使用npapi,详细请参考《使用NPA ??件的源码实例》。

源码点此下载,如有问题请点此

ATL COM ActiveX 入门

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: