1

私の COM オブジェクトの 1 つには、2 番目の引数でバイト配列とその長さを返す次のメンバーがあります。

HRESULT GetBinaryData([out] VARIANT *pVal, [out] long *pLen);

ご参考までに、

**Part of implementation is as follows:**
....
VariantInit(pVal);
pVal->vt = VT_UI1 | VT_ARRAY;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = ARRAY_LBOUND;
rgsabound[0].cElements = (ULONG)len;
pVal->parray = SafeArrayCreate(VT_UI1, 1, rgsabound);
....

VBScript でこのメンバーを呼び出そうとしていますが、すべての試行で失敗しました。これが私のvbscriptコードスニペットです:

Set op = CreateObject("myserver")
dim bytearray()
op.GetBinaryData bytearray, bytearray_len

しかし、3 行目で、型の不一致エラーが発生します...

プロシージャの結果を vbscript 変数に取得するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

0

retvalCOM レベルでの使用を検討してください。

HRESULT GetBinaryData([out, retval] VARIANT *pVal);

戻り値はSAFEARRAY既存の C++ であるため、引き続き機能します。この場合、SAFEARRAY呼び出し元に配列と長さの両方を与えるのに十分な戻り値です。つまり、C++ コードはそのまま残ります。

VBScript コードは次のようになります。

Option Explicit
Set op = CreateObject("myserver")
Dim byteArray, lenArray
byteArray = op.GetBinaryData()
lenArray = UBound(byteArray) - LBound(byteArray) + 1

または同等のオブジェクト (例: ) を使用retvalして 1 つしか持つことができませんが、VBScript の多数の戻り値をパッケージ化できます。SAFEARRAYIXMLDOMDocument

于 2012-11-20T22:09:04.553 に答える