寫動态庫的免不了接觸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;
};
};
即以上的這個。