本文研究如何在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()6. 測試執行catch (e)
}
原字串: 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...