У меня возникла проблема повторно использовать C++ DLL, используемую с VB 6.0 на VB.NET.Вызов неуправляемого кода C++ dll из VB.NET
Мой помощник запрограммировал код в VB6.0, который вызвал в Ansi C++ DLL, запрограммированную в VC 6.0 ++.
Функция объявляется следующим образом;
CTYPE DWORD CCONV IniciaGestion(HWND newhventana, char *ficheroini, char *mensaerror)
Бывший код в VB6.0 назвал эту DLL таким способом
status = IniciaGestion(Me.hWnd, "DRVCOMM2.ini", mensaerror)
где mensaerror
является выходным параметром определяется как
Public mensaerror As String * 256
Теперь я могу использовать эту DLL из VB .СЕТЬ?
У меня проблема с объявлением этого третьего параметра.
Я использую это заявление
<DllImport("GestionPrg.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
Public Shared Function IniciaGestion(<MarshalAs(UnmanagedType.I4)> ByVal a As Integer, <MarshalAs(UnmanagedType.LPStr)> ByVal b As String, <OutAttribute(), MarshalAs(UnmanagedType.LPTStr)> ByRef c As String) As Long
и функция вызывается следующим
Dim mensaerror As String
Class1.IniciaGestion(Me.Handle, "C:\\Windows\\DRVCOMM2.ini", mensaerror)
Я отладки и функция вызывается, но когда я иду к установленному значению для mensaerror
в коде C++ создается исключение.
Может ли кто-нибудь помочь мне в объявлении в VB.NET?
, если вы на самом деле что вы делаете, вы никогда не объявляете строки 'ByRef' при вызове во внешнюю библиотеку в VB. – GSerg