写动态库的免不了接触OCX以供浏览器调用。
在写第一个OCX的时候调用时出现了一些问题。最难的一个地方在网上反而没查到。关于注册了OCX之后与JS关联的那个注册号.
<object id="oadd" name="oadd"
style="LEFT:0px; WIDTH:50%; TOP:0px; HEIGHT: 30%"
classid="clsid:91365EC3-642D-4D14-A834-6A529F8DBD25">
</object>
就是以上的clsid 到底该选择idl中的哪一个?
简单的说就是自动生成的idl中的最后一个id
// HelloOcx.idl : ActiveX 控件项目的类型库源。
// 此文件将由 MIDL 编译器工具处理以
// 产生类型库(HelloOcx.tlb),该类型库将成为
// HelloOcx.ocx.
#include <olectl.h>
#include <idispids.h>
[ uuid(0AB5DC44-9459-48B2-AED1-74FE56414FA0), version(1.0),
control ]
library HelloOcxLib
{
importlib(STDOLE_TLB);
// CHelloOcxCtrl 的主调度接口
[
uuid(3D6B37A0-95DF-4276-B521-32217E585CD2)
]
dispinterface _DHelloOcx
{
properties:
[id(2) ] BSTR name;
[id(3) ] BSTR nnname;
methods:
[id(DISPID_ABOUTBOX)] void AboutBox();
[id(1)] BSTR GetResult(DOUBLE a, DOUBLE b);
[id(4)] LONG getshenfenzheng(CHAR* str);
};
// CHelloOcxCtrl 的事件调度接口
[
uuid(700928B3-4E58-4DA2-A274-B4BFB3FF33FA)
]
dispinterface _DHelloOcxEvents
{
properties:
// 事件接口没有任何属性
methods:
[id(1)] void OnAddCallBack(DOUBLE a, DOUBLE b);
};
// CHelloOcxCtrl 的类信息
[
uuid(91365EC3-642D-4D14-A834-6A529F8DBD25)//
]
coclass HelloOcx
{
[default] dispinterface _DHelloOcx;
[default, source] dispinterface _DHelloOcxEvents;
};
};
即以上的这个。