Salve a tutti!

Sto provando a creare un'applicazione in VB.net, e per fare ciò dovrei usare dei metodi della libreria GRF.dll (il GRF è un tipo di archivio, come dire RAR o ZIP, ma sviluppato da una singola azienda); il sorgente di questa libreria, con la relativa documentazione, è disponibile qui:
http://openkore.sourceforge.net/grftool/html

Quindi in Visual Basic, leggendo le varie dichiarazioni, ho inserito questo codice:
codice:
' GRF Types
    Enum GrfErrorType
        GE_SUCCESS
        GE_BADARGS
        GE_INVALID
        GE_CORRUPTED
        GE_NSUP
        GE_NOTFOUND
        GE_INDEX
        GE_ERRNO
        GE_ZLIB
        GE_ZLIBFILE
        GE_NODATA
        GE_BADMODE
        GE_NOTIMPLEMENTED
    End Enum

    Public Structure GrfError
        Dim type As GrfErrorType
        Dim line As Integer
        Dim name As String
        Dim func As String
        Dim extra As Int64
    End Structure

    Public Structure GrfFile
        Dim compressed_len_aligned As Integer
        Dim compressed_len As Integer
        Dim real_len As Integer
        Dim flags As Int16
        Dim hash As Integer
        Dim name As String
        Dim data As String
    End Structure

    Public Structure Grf
        Dim filename As String
        Dim len As Integer
        Dim type As Integer
        Dim version As Integer
        Dim nfiles As Integer
        Dim files() As GrfFile
        Dim first As GrfFile
        Dim last As GrfFile

        Dim allowCrypt As Int16
        Dim f As System.IO.File
        Dim allowWrite As Int16
        Dim zbuf As Object ' void
    End Structure

    Public Structure GrfOpenCallback
        Dim file As GrfFile
        Dim mError As GrfError
    End Structure

    ' GRF Library (grf.dll) functions
    Public Declare Function GrfOpen Lib "grf.dll" Alias "grf_open" (ByVal fname As String, ByVal mode As String, ByVal mError As GrfError, ByVal callback As GrfOpenCallback) As Grf
    Public Declare Function GrfExtract Lib "grf.dll" Alias "grf_extract" (ByVal grf As Grf, ByVal grfname As String, ByVal file As String, ByVal mError As GrfError) As Integer
    Public Declare Function GrfClose Lib "grf.dll" Alias "grf_close" (ByVal grf As Grf)
    Public Declare Function GrfFree Lib "grf.dll" Alias "grf_free" (ByVal grf As Grf)
inoltre ho utilizzato una Sub per l'utilizzo di queste

codice:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim myGrf As Grf
        Dim err1 As GrfError
        Dim grf1 As GrfOpenCallback
        myGrf = GrfOpen("archivio.grf", "rb", err1, grf1)
    End Sub
Ovviamente all'avvio non funziona e mi restituisce questo errore:

MarshalDirectiveException non è stata gestita.
La firma del tipo del metodo non è compatibile con PInvoke.
e nella finestra di controllo imeddiati restituisce:
Eccezione first-chance di tipo 'System.Runtime.InteropServices.MarshalDirectiveEx ception' in GrfManager.exe
Ovviamente se aggiungo la libreria come riferimento da errore (me lo immaginavo poiche non c'entra nulla col .NET)

E' colpa della libreria troppo vecchia? o il fatto che è in C? o delle dichiarazioni?
Qualsiasi aiuto/commento è ben gradito

Grazie in anticipo!