Como importar e chamar DLL não gerenciada com a string de ponteiro ANSI C string “char *” do VB.NET?

Eu escrevi minha própria função, que em C seria declarada assim, usando o padrãoWin32 convenções de chamada:

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

Eu tenho a seguinte quantidade de código do Visual Basic calculada, que deve importar o arquivo DLL e chamar essa função, agrupando-a para facilitar a chamada de coisa ("CommandHere", GetDataBackHere).

ATUALIZAÇÃO: Este código agora é uma solução funcional, como mostrado aqui:

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

Obtive o código para compilar seguindo a ajuda recebida aqui e depois esqueci oAs Return Type (que me deu um MarshalDirectiveException PInvokeRestriction). Então tive uma falha de declaração dentro da minha DLL, o que levou a uma SEHException. Uma vez consertado, isso funciona MUITO BEM. Obrigado pessoal. Existem grupos de notícias em que as pessoas dizem que isso não pode ser feito, que o Visual Basic carrega apenas assemblies DLL gerenciados (o que eu acho que é a coisa normal com a qual a maioria dos usuários do Visual Basic está acostumada).

questionAnswers(2)

yourAnswerToTheQuestion