win7 64位 PC
vs2010
IE8 32位
html 代码:
<HTML>
<HEAD>
</HEAD>
<BODY>
<object classid="clsid:B07C631B-9F21-4EFB-AA01-6623A070ED24" id="myAddObj" ></object>
<p></p>
<input type="button" value="init" onclick="init();" />
<p></p>
<input type="button" value="test" onclick="test();" />
<script language="javascript">
function init() {
var calc = document.getElementById('myAddObj');
var result = calc.Init(123);
alert(result);
}
function test() {
var calc = document.getElementById('myAddObj');
var result = calc.Test(123);
alert(result);
}
</script>
</BODY>
</HTML>
activeX 代码:
EtcControl.h中:
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(Test)(VARIANT devType, LONG* result);
STDMETHOD(Init)(VARIANT devType, LONG* result);
};
OBJECT_ENTRY_AUTO(__uuidof(EtcControl), CEtcControl)
EtcControl.cpp中:
STDMETHODIMP CEtcControl::Test(VARIANT devType, LONG* result)
{
// TODO: 在此添加实现代码
//*result = 99;
*result = 99 ;
return S_OK;
}
STDMETHODIMP CEtcControl::Init(VARIANT devType, LONG* result)
{
// TODO: 在此添加实现代码
//*result = 5;
*result = 55 ;
return S_OK;
}
EtcComNFC.idl中
// EtcComNFC.idl : EtcComNFC 的 IDL 源
//
// 此文件将由 MIDL 工具处理以
// 产生类型库(EtcComNFC.tlb)和封送处理代码。
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(48DC9034-C0C9-42F7-8282-2FBD4DCBA401),
dual,
nonextensible,
pointer_default(unique)
]
interface IEtcControl : IDispatch{
[id(1)] HRESULT Test([in] VARIANT devType, [out,retval] LONG* result);
[id(2)] HRESULT Init([in] VARIANT devType, [out,retval] LONG* result);
};
[
uuid(F78D37FB-8FFB-48F3-BCA2-9534B43ADE71),
version(1.0),
]
library EtcComNFCLib
{
importlib("stdole2.tlb");
[
uuid(937A2273-0902-41B6-9523-D5D6AA9BCB35)
]
dispinterface _IEtcControlEvents
{
properties:
methods:
};
[
uuid(B07C631B-9F21-4EFB-AA01-6623A070ED24)
]
coclass EtcControl
{
[default] interface IEtcControl;
[default, source] dispinterface _IEtcControlEvents;
};
};
如果需要添加函数接口,需要注意三个地方:
EtcComNFC.idl
EtcControl.cpp
EtcControl.h
注册控件的方法
regsvr32 EtcComNFC.dll
显示效果:
下一步 需要整理一下 如何传参数: