Передача объекта 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++? Любое предложение приветствуется.

0 ответов

Другие вопросы по тегам