Здравствуйте, не могу понять как передавать VARIANT из Com метода (ATL/C++) в C#.
Com метод ATL:
STDMETHODIMP COMCK::RetKosmoSystems(BSTR PathToKosmoFile, VARIANT* KosmoSystems)
{
CString Path , cs ;
Path = PathToKosmoFile;
int RetVal;
RetVal = this->KosmoExplorer.RetKosmoSystems(Path, KosmoSystems->parray );
KosmoSystems->vt = VT_SAFEARRAY + VT_BSTR;
if (RetVal <= 0)
.....
}
Клиентская сторона С#
COMCKLib.ICOMClass m_CK = new COMCKLib.ICOMClass();
Object obj = new object();
m_CK.RetKosmoSystems(buttonEdit1.Text , ref obj);
При выполнении метода m_CK.RetKosmoSystems(buttonEdit1.Text , ref obj) возникает сообщение:
Additional Information: Обнаружено недопустимое значение типа VARIANT во время преобразования неуправляемого значения типа VARIANT в управляемый объект. Передача в CLR недопустимого значения типа VARIANT может вызвать неожиданные исключения, а также повреждение или потерю данных.
При нажатии continue выскакиевает исключение:
Exception: Данный метод возвратил тип Variant COM, который не совместим с Interop.
Method: RetKosmoSystems
Full name: COMCKLib.ICOMClass
Module: Interop.COMCKLib.dll
Ответы на форумах в основном сводятся к советам типа попробуй использовать тип Object или используй тип Object , а потом откасть его к тому что надо. Понятно такие ответы не удовлетворят , тем более что ошибка возникает раньше.