我們經常會遇到,將指令碼中定義的多個參數打包到一個數組中,然後將這個數組傳給一個組件方法。javascript和vbscript定義數組的方式是不 同的。vbscript中的數組採用的是自動化相容類型SAFEARRAY,對它進行遍曆是很方便的。而javascript動態指令碼的秘密武器--是IDispatchEx介面
對於一個基本的Object對象,即可以動態增加或刪除屬性、方法,也可以產生一個自訂的類,完全基於一個IDispatchEx介面。 IDispatchEx是IDispatch的擴充,為實現動態指令碼的一些動態特性量身定製。除了提供IDispatch介面的所有方法之 外,IDispatchEx還額外提供以下幾個特性:
- Add new members to an object ("expando") — use GetDispID with the fdexNameEnsure flag.
- Delete members of an object — use DeleteMemberByName or DeleteMemberByDispID.
- Case-sensitive dispatch operations — use fdexNameCaseSensitive or fdexNameCaseInsensitive.
- Search for member with implicit name — use fdexNameImplicit.
- Enumerate DISPIDs of an object — use GetNextDispID.
- Map from DISPID to element name — use GetMemberName.
- Obtain properties of object members — use GetMemberProperties.
- Method invocation with this pointer — use InvokeEx with DISPATCH_METHOD.
Allow browsers that support the concept of name spaces to obtain the name space parent of an object — use GetNameSpaceParent.
,
ActiveX組件與JavaScript互動
http://hi.baidu.com/huhe/blog/item/817a59ee1ca423f8b3fb95de.html
介紹了連接點, 資料傳遞,等
而對於vb的safearray, 推薦使用atl的CComSafeArray<>和CComVariant<>類