Variant (VT_ARRAY) в .NET
От: MaxiMal_TSG Россия  
Дата: 22.09.10 04:49
Оценка:
Здравствуйте, не могу понять как передавать 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 , а потом откасть его к тому что надо. Понятно такие ответы не удовлетворят , тем более что ошибка возникает раньше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.