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:
inoltre ho utilizzato una Sub per l'utilizzo di questecodice:' 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)
Ovviamente all'avvio non funziona e mi restituisce questo errore: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
e nella finestra di controllo imeddiati restituisce:MarshalDirectiveException non è stata gestita.
La firma del tipo del metodo non è compatibile con PInvoke.
Ovviamente se aggiungo la libreria come riferimento da errore (me lo immaginavo poiche non c'entra nulla col .NET)Eccezione first-chance di tipo 'System.Runtime.InteropServices.MarshalDirectiveEx ception' in GrfManager.exe
E' colpa della libreria troppo vecchia? o il fatto che è in C? o delle dichiarazioni?
Qualsiasi aiuto/commento è ben gradito
Grazie in anticipo!


Rispondi quotando