Оберните 32-битную C ++ dll в COM-код, который является 64-битным и написан на VB.net - PullRequest
2 голосов
/ 11 октября 2019

У нас есть неуправляемый 32-битный c ++ dll, и мы хотим обернуть его в код COM, который является 64-битным и написан на VB.net. Неуправляемый метод dll имеет параметр с типом указателя, и мы не можем получить требуемый ответ от методов. Кроме того, код позади dll неизвестен

Мы пробовали разные типы типов данных в VB, чтобы они соответствовали типу данных указателя C ++: мы пробовали - BYTE (), String, long, arraylist, intptr, uintptr, progress.open4GL.memptr, byte, integer и т. д.

Вот как мы импортируем dll и параметры (входная строка, input_output ptr, input_output ptr) и тип возвращаемого значения long. Проблема с переменными ptr

<DllImport("wp2.dll")>
Public Shared Function WPStartJob(<MarshalAs(UnmanagedType.LPWStr)> typAvlista As String,
                                  ByRef mPVariabelLista As IntPtr,
                                  ByRef mPSubrapportLista As IntPtr) As Long
End Function

вывод метода (для аргумента с типом указателя) должен быть список строковых значений ex. "ListaS_Sub.rpt"

Но мы получаем нулевое значение для всех типов.

...