Передача массивов между C++ и VBScript
От: Artem2603 Россия  
Дата: 14.04.03 10:55
Оценка:
В чем может быть дело. Ниже приведенный код нормально складывает и достает переменные
(числа строки) но выдает ошибку "TypeMisMatch DataStorage.GetValue" если пытаться
положить а потом достать массив. Причем складывает массив нормально.
Может ктонибудь сталкивался ?

//IDL
[id(2), helpstring("method SetValue")] HRESULT SetValue([in] BSTR bstrName, [in] VARIANT* newVal);
[id(3), helpstring("method GetValue")] HRESULT GetValue([in] BSTR bstrName, [out, retval] VARIANT* pVal);

//C++
STDMETHODIMP CDataStorage::SetValue(BSTR bstrName, VARIANT* newVal)
{
CSingleLock lock(&m_AccessGuard, TRUE);

CString csValName(bstrName);

VARIANT* pVar = m_DataMap[csValName];

if(pVar == NULL)
{
pVar = (VARIANT*)CoTaskMemAlloc(sizeof(VARIANT));
VariantInit(pVar);
m_DataMap[csValName] = pVar;
}

VariantClear(pVar);
VariantCopy(pVar, newVal);

return S_OK;
}

STDMETHODIMP CDataStorage::GetValue(BSTR bstrName, VARIANT* pVal)
{
CSingleLock lock(&m_AccessGuard, TRUE);

CString csValName(bstrName);

VARIANT* pVar = m_DataMap[csValName];

if(pVar != NULL)
{
VariantCopy(pVal, pVar);
return S_OK;
}
else
{
return S_FALSE;
}
}

//VBScript 1
Dim text
Dim newtext

text = "fuck"
DataStorage.SetValue "val1", text
newtext = DataStorage.GetValue("val1")
MsgBox(newtext)

//VBScript 2
Dim text1(1)
Dim newtext1

text1(0) = "fuck"
DataStorage.SetValue "val2", text1
newtext1 = DataStorage.GetValue("val2")
MsgBox(newtext1(0))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.