天天看點

Js中調用OCX的classid。

寫動态庫的免不了接觸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;
	};

};
           

即以上的這個。