通過JavaScript來調用com的方式,之前就因為項目需要,所以處理過,但是之前覺得沒有什麼所以也沒有記錄什麼的,昨天突然想找這方面的資料,結果一時間有些困難,現在講這些內容在整理一下,算是個備忘吧。
這兩種調用方式,可以說大同小異,主要區別在於如何找到這個com的組件,下面就介紹一下:
1、首先使用delphi建立一個com,這個com有一個方法:function Method1(const AData: WideString): WideString;將傳入的值返回。
2、為了保證這個com是可以啟動並執行,首先建了一個delphi的例子,來通過com的方式調用,就是一個按鈕,點擊一下將com取回的值設定為表單的標題,測試了一下ok,注意:這個com能使用的前提是這個com已經註冊了(通過regsvr32註冊過了),否則會提示沒有註冊,在通過type匯入com時可能會提示“ole”錯誤,這個錯誤是由於com需要管理員權限,使用管理員權限開啟delphi即可。
procedure TForm1.Button1Click(Sender: TObject); var o: IDemo; begin o := CoDemo.Create; Caption:= o.Method1('123'); end;
3、前面證明這個dll已經沒有問題,現在通過com來調用一下:
(1)
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>TestAxObj</title></head><body style="background-color:whitesmoke; margin:5px"><form method="post" action=""> <object id="tc1" name="shangj" width="200px" height="20px" style="background-color:red;" classid="CLSID:1C93CD11-2021-4D39-ABA2-FDBBEC655F23"> </object> <script type="text/javascript" language=javascript> var tc1 = document.getElementById("shangj"); //var tc1 = document.getElementById("tc1");均可以 var s = "test"; s = tc1.Method1("123"); alert(s); </script></body></html>
其中1C93CD11-2021-4D39-ABA2-FDBBEC655F23是由下面擷取的
LIBID_Project1: TGUID = '{DAA74E33-0A12-452A-A0AA-8AA1CE239806}'; IID_IDemo: TGUID = '{DC66EC7C-FA4E-4593-ACB0-92E477F297FD}'; CLASS_Demo: TGUID = '{1C93CD11-2021-4D39-ABA2-FDBBEC655F23}';
(2)
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>TestAxObj</title></head><body style="background-color:whitesmoke; margin:5px"><form method="post" action=""> <script type="text/javascript" language=javascript> var tc1 = new ActiveXObject("Project1.Demo"); var s = "test"; s = tc1.Method1("123"); alert(s); </script></body></html>
其中("Project1.Demo")是由同上的內容擷取的。測試一下,就可以看到提示資訊了。