Как мне импортировать и вызывать неуправляемый Cll с помощью строки указателя char * ANSI C в VB.NET?

Я написал свою собственную функцию, которая в C будет объявлена ​​так, используя стандартныеWin32 соглашения о вызовах:

int Thing( char * command, char * buffer, int * BufSize);

У меня есть следующий объем кода Visual Basic, который должен импортировать файл DLL и вызвать эту функцию, оборачивая ее, чтобы было проще вызывать Thing («CommandHere», GetDataBackHere).

ОБНОВЛЕНИЕ: Этот код теперь является рабочим решением, как показано здесь:

Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Imports System
Imports System.Text

Namespace dllInvocationSpace

    Public Class dllInvoker

        ' I tried attributes, but I could not make it build:
        ' <DllImport("thing1.dll", False, CallingConvention.Cdecl, CharSet.Ansi, "Thing", True, True, False, True)>
        Declare Ansi Function Thing Lib "thing1.dll" (ByVal Command As String, ByRef Buffer As StringBuilder, ByRef BufferLength As Integer) As Integer

        ' This part contributed by helpful user:
        Shared Function dllCall(ByVal Command As String, ByRef Results As String) As Integer
            Dim Buffer As StringBuilder = New StringBuilder(65536)
            Dim Length As Integer = Buffer.Capacity
            Dim retCode As Integer = Thing(Command, Buffer, Length)
            Results = Buffer.ToString()
            'Debug.Assert(Results.Length = Length)  ' This assertion is not true for me
            Return retCode
        End Function

    End Class

End Namespace

Я получил код для сборки, следуя полученной здесь помощи, а затем я забылAs Return Type (который дал мне MarshalDirectiveException PInvokeRestriction). Затем в моей DLL произошел сбой подтверждения, что привело к исключению SEHException. После исправления это работает КРАСИВО. Спасибо, ребята. Существуют группы новостей, в которых люди говорят, что это невозможно, поскольку Visual Basic загружает только управляемые сборки DLL (что, как мне кажется, является обычной вещью, к которой привыкли большинство пользователей Visual Basic).

Ответы на вопрос(2)

Ваш ответ на вопрос