Передача объекта vb.net byref в неуправляемый код
Я удаляю событие из управляемого кода vb.net, который обрабатывается в неуправляемом коде vC++. Ниже приведена строка кода:
Dim pCALMarkups as Object
RaiseEvent RequestEISData(nOrdinal, pCALMarkups, eMarkupCreateSecurity, eMarkupModifySecurity, eMarkupDeleteSecurity, sUserNameSecurity)
ОбъектpCALMarkups передается как ссылка и будет инициализирован в неуправляемом коде vC++. Ниже приводится объявление события в VB.NET:
Public Event RequestEISData(ByVal nOrdinal As Short, <[In](), [Out]()> <MarshalAs(UnmanagedType.IDispatch)> ByRef pCALMarkups As Object, ByRef eMarkupCreateSecurity As Short, ByRef eMarkupModifySecurity As Short, ByRef eMarkupDeleteSecurity As Short, ByRef sUserNameSecurity As String)
Ниже приведена функция, которая обрабатывает это событие в VC++.
void __stdcall OnRequestEISDataViewer(short nOrdinal,
IDispatch **pMarkups,
short *eMarkupCreateSecurity,
short *eMarkupModifySecurity,
short *eMarkupDeleteSecurity,
BSTR *sUserNameSecurity)
{ CCALPageMarkups* pCalMarkups = new CComObject <CCALPageMarkups>;
// CCALPageMarkups is a class declared in vc++ code
// Some code for initializing pCalMarkups
*pMarkups = pCalMarkups; //last line of code in this function
}
Во время отладки кода я могу войти в функцию OnRequestEISDataViewer, все внутри этой функции выполняется без каких-либо ошибок, но когда управление выходит из функции после выполнения последней строки, это показывает нижеуказанную ошибку:
"Помощник по управляемой отладке" InvalidVariant "обнаружил проблему в" D:\Shared Folder\Workman code\UI\bin\WorkMan.exe ". Дополнительная информация: во время преобразования из неуправляемого VARIANT в управляемый объект был обнаружен недопустимый VARIANT.. Передача недействительных VARIANT в CLR может привести к непредвиденным исключениям, повреждению или потере данных. "
Итак, как я могу использовать строгий тип или объект Marshal pCALMarups в коде VB.NET, чтобы эта ошибка была устранена? или я должен изменить код vC++? Любое предложение приветствуется.