ホームページ >ウェブフロントエンド >jsチュートリアル >COM_javascript スキルで JavaScript 配列サイズを取得するコード

COM_javascript スキルで JavaScript 配列サイズを取得するコード

WBOY
WBOYオリジナル
2016-05-16 18:41:361387ブラウズ

IDispatch 型のポインターは、配列オブジェクトが実際には JavaScript の組み込み配列オブジェクトであることを示します。JavaScript 側では、GetIDsOfNames を通じて配列のサイズを取得できます。関数と Invoke 関数の長さにより、配列の内容を動的に可変にすることができます。

コードをコピー コードは次のとおりです:

// 配列の長さを取得します
BSTR bstrLength = L "長さ";
DISPID dispid;
hr = lpDispatch->GetIDsOfNames(IID_NULL, &bstrLength, 1,
LOCALE_USER_DEFAULT, &dispid); 🎜>{
CComVariant varResult;
hr = lpDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &noArgs, &varResult, NULL, NULL); vt == VT_I4 )
{
nLength = varResult.intVal;
}
}


このとき、nLength は配列の長さを取得します。

JavaScript の配列はオブジェクトであり、配列の内容は動的に作成されるオブジェクトの属性であり、これらの属性のクエリ メソッドは長さのクエリ メソッドに似ています。 GetIDsOfNames 関数と Invoke 関数も同様です。主な関数は名前です。配列内の要素オブジェクトの属性の名前は動的に作成されます。つまり、ここでは属性名を取得します。次のように添え字を付けて取得することもできます:





コードをコピーCComVariant vaIndex(i, VT_I4);
DISPID dispid; >hr = lpDispatch->GetIDsOfNames(IID_NULL, &vaIndex.bstrVal ,1,
LOCALE_USER_DEFAULT, &dispid);
if (FAILED(hr) )
{
続行; >CComVariant varResult;
hr = lpDispatch->Invoke (dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &noArgs, &varResult, NULL, NULL);
VARTYPE vt = varResult.vt; vt == VT_DISPATCH )
{
InvokeArray( varResult );
}
hr = varResult.ChangeType(VT_BSTR)
CComBSTR = varResult.bstrVal; >}



したがって、これら 2 つの属性メソッドを呼び出すことにより、すべての JavaScript 配列オブジェクトを COM インターフェイスで容易に実行できます。

これにはどのような利点がありますか? 多くのオンライン リソースを見ると、そのほとんどが SAFEARRAY を使用して構造体を処理し、COM インターフェイスに渡していることがわかりましたが、SAFEARRAY は MIDL と JavaScript ではサポートされていません。オブジェクト自体はこのコンテンツをサポートしていません。SAFEARRAY モードで動作するには、VBScript と JavaScript を切り替える必要があります。これにより、プログラムの作成が困難になり、保守担当者が混乱する可能性があります。

JavaScript を直接使用して配列を渡し、SAFEARRAY を通じて構造を統合する必要はありません。同時に、JavaScript のすべてのオブジェクト (要素) は独自の型情報を持っているため、JavaScript の配列は C の構造体の最良の代替 (転送メソッド) となります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。