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!