如何将字符串数组从VBScript传递给COM +

时间:2017-10-20 11:41:20

标签: c++ vbscript

我编写了一个以COM +应用程序运行的C ++ COM。 我试图从VBScript(ASP应用程序)访问COM功能。 我可以从VBScript调用COM函数,它接受一个字符串。但是当我尝试调用一个带有字符串数组的COM函数时,我可以得到数组的长度但是我无法从COM端的那个数组中检索元素。

VBScript(ASP应用程序)

    dim myComObj
    Set myComObj = Server.CreateObject("ProgId_PerlCOMSimple.1")
    Dim myArray(3)
    myArray(0) = "Clean Underwear"
    myArray(1) = "Vacuum Cleaner"
    myArray(2) = "New Computer"
    myArray(3) = "Talking Bass"
    strDfStatus = myComObj.TestArray1 (myArray) 

作为COM +应用程序运行的C ++ COM(通过dllHost.exe)

    STDMETHODIMP CPerlCOMSimple::TestArray1(VARIANT* testArray, LONG* lResult)
    {
        // TODO: Add your implementation code here
        *lResult = testArray->parray->rgsabound->cElements;
        BSTR** StrPtr = 0;
        //LONG* pVals;
        long LowerBound = 0;
        long UpperBound = 0;
        int i;

        SafeArrayGetLBound(testArray->parray, 1, &LowerBound);
        SafeArrayGetUBound(testArray->parray, 1, &UpperBound);

        SafeArrayAccessData(testArray->parray, (void**)&pVals);

        for (i = LowerBound; i <= UpperBound; ++i)
        {
            BSTR* lVal = StrPtr[i];
            lVal++;
        }
        SafeArrayUnaccessData(testArray->parray);
        return S_OK;
    }

1 个答案:

答案 0 :(得分:1)

VBScript不会生成带有SAFEARRAY的{​​{1}},这正是您所期望的。它将有VARTYPE VT_BSTR

VT_VARIANT