我编写了一个以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;
}
答案 0 :(得分:1)
VBScript不会生成带有SAFEARRAY
的{{1}},这正是您所期望的。它将有VARTYPE VT_BSTR
。
VT_VARIANT