【发布时间】:2017-10-20 21:05:16
【问题描述】:
我编写了一个作为 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;
}
【问题讨论】:
-
您是否从 COM+ 方法测试过 COM+ 方法?
-
您正在寻找传递一个变体。你看过这里吗? stackoverflow.com/questions/295067/passing-an-array-using-com