JavaScript與ActiveX之間傳遞資料

2021-06-26 05:49:49 字數 1409 閱讀 7234

本文研究如何在js等指令碼語言與activex控制項之間通訊,如何傳遞各種型別的引數,以及com的idispatch介面。使用類似的方法,可以推廣到其他所有指令碼型語言,如lua,autocad等。

本文將研究以下幾個方面:

整型陣列傳參

字串引數,字串返回值

修改傳入字串內容

陣列引數

idispatch介面介紹

修改輸入陣列內容

增加陣列內容

以陣列傳參方式,js呼叫s4execute()

由於本文篇幅較長,所以將以**方式進行發表,**一主要討論1-3點,**二主要討論4-6點,**三主要討論7-8點。

(一)整型引數

1. 整型引數,可直接傳遞。整型返回值需要以 [retval] long *方式宣告

2. com中c++介面定義

stdmethodimp cjsatl::intsum(long a, long b, long* retval)

3. js中呼叫

function test_int()

catch (e)

}

(二)字串引數,字串返回值

1. com中,字串使用bstr表示,bstr實際是unicode 字元陣列(wchar)

2. com字串傳參規範中規定:

a) 生成字串變數時,需要sysallocstring/sysallocstringbytelen分配空間。

b) 函式結束前,分配的空間需要釋放,sysfreestring。

c) 若函式中分配的空間作為返回值,則不釋放。而由外部呼叫者負責釋放。

3. com中c++函式定義

stdmethodimp cjsatl::stringadd(bstr str1, bstr str2, bstr* retval)

4. js中呼叫

function test_str_cat()

catch (e)

}

(三)修改傳入字串內容

1. 原則上,不應修改傳入字串的記憶體資料,否則可能破壞資料,造成js端異常。

2. 使用中,可通過修改傳入字串緩衝區內容的方法,實現引數傳遞。

3. 不能使用sysfreestring破壞傳入的bstr引數,否則會破壞js記憶體結構

4. com中c++定義

stdmethodimp cjsatl::strmodify(bstr str)

5. js呼叫

function test_str_modify()

catch (e)

}

6. 測試執行

原字串: abcdefghijklmn

呼叫後: 0123456789:;<=

Cocos Creator 元件 動作Action

panel action.js var panel action type cc.enum var panel action cc.class action sequence action repeat action repeatforever action spawn action delayti...

簡單的controller方法和action方法

不同系統的controller方法和對應的action方法都不一樣,但是基本知識呼叫路徑和介面的定義方法有區別,方法中的編寫是一樣的,post和get定義,介面引數的定義,路徑的編寫和註解的使用 1.controller post restcontroller public class storec...

Cocos Creator之自定義Action

使用方法 學習自定義action的最好方法是去檢視cocos creator中常用動作的寫法。比如cc.moveto繼承了cc.moveby,而cc.moveby則進一步繼承了cc.actioninterval。可以從cocos creator的引擎原始碼找到cc.moveby的相關定義 cc.mo...