У меня есть ActiveX DLL, которую я пытаюсь использовать в своем приложении C #.Большинство методов взаимодействия работают.У меня проблемы со следующим методом (неуправляемое определение):
HRESULT SendData([in] long lChID, [in] short nIndex,
[in] VARIANT vData, [out, retval] VARIANT_BOOL *bResult);
Тип данных VARIANT необычен для меня, и я не знаю, что с ним делать, как COM иmarshalling - новая тема для меня.
BOOL CControl::SendData(long lChID, short nIndex, const VARIANT& vData)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_I2 VTS_VARIANT;
InvokeHelper(0x1f, DISPATCH_METHOD, VT_BOOL,
(void*)&result, parms, lChID, nIndex, &vData);
return result;
}
Я использовал инструмент .NET AxImp.exe , чтобы получить управляемую оболочку для метода:
[DispId(31)]
[MethodImpl(MethodImplOptions.InternalCall,
MethodCodeType = MethodCodeType.Runtime)]
public virtual bool SendData([In] int lChID, [In] short nIndex,
[MarshalAs(UnmanagedType.Struct), In] object vData);
Правильно ли сгенерирована оболочка метода C #?
Как правильно инициализировать и заполнить параметр vData?
РЕДАКТИРОВАТЬ:
ЕщеПример кода, помогающий расшифровать 3-й параметр VARIANT.
VARIANT var;
VariantInit(&var);
var.vt = VT_UI1 | VT_BYREF;
var.pbVal = (unsigned char *)pSend;
if (!m_Control.SendData(m_lCurChID, m_combo.GetCurSel() + 1, var))
AfxMessageBox(_T("SendData failed"));
* var.vt и var.pbVal мне не известны.Есть ли соответствующий код в C #?