Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problema con Classi COM
Forum - C# / VB.NET - Problema con Classi COM

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2173
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 0:46
Sabato, 07/02/2009
Salve chiedo aiuto mediante questo mio grande blocco

attualmente mi trovo difronte ad un ostacolo
non riesco in nessun modo a far funzionare questa classe com.

vi mostro il mio sorgente

Codice sorgente - presumibilmente VB.NET

  1. Enum GrfErrorType
  2.         GE_SUCCESS
  3.         GE_BADARGS
  4.         GE_INVALID
  5.         GE_CORRUPTED
  6.         GE_NSUP
  7.         GE_NOTFOUND
  8.         GE_INDEX
  9.         GE_ERRNO
  10.         GE_ZLIB
  11.         GE_ZLIBFILE
  12.         GE_NODATA
  13.         GE_BADMODE
  14.         GE_NOTIMPLEMENTED
  15.     End Enum
  16.  
  17.  
  18.     Public Structure GrfError
  19.         Dim type As GrfErrorType
  20.         Dim line As Integer
  21.         Dim name As String
  22.         Dim func As String
  23.         Dim extra As Int64
  24.     End Structure
  25.  
  26.     Public Structure GrfFile
  27.         Dim compressed_len_aligned As Integer
  28.         Dim compressed_len As Integer
  29.         Dim real_len As Integer
  30.         Dim flags As Int16
  31.         Dim hash As Integer
  32.         Dim name As String
  33.         Dim data As String
  34.     End Structure
  35.  
  36.     Public Structure Grf
  37.         Dim filename As String
  38.         Dim len As Integer
  39.         Dim type As Integer
  40.         Dim version As Integer
  41.         Dim nfiles As Integer
  42.         Dim files() As GrfFile
  43.         Dim first As GrfFile
  44.         Dim last As GrfFile
  45.  
  46.         Dim allowCrypt As Int16
  47.         Dim f As System.IO.File
  48.         Dim allowWrite As Int16
  49.         Dim zbuf As Object ' void
  50.     End Structure
  51.  
  52.     Public Structure GrfOpenCallback
  53.         Dim file As GrfFile
  54.         Dim mError As GrfError
  55.     End Structure
  56.  
  57.     ' GRF Library (grf.dll) Funzioni
  58.     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
  59.     'Public Declare Function GrfOpen Lib "grf.dll" Alias "grf_open_callback" (ByVal fname As String, ByVal mode As String, ByVal mError As GrfError, ByVal callback As IntPtr) As Grf
  60.     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
  61.     Public Declare Function GrfClose Lib "grf.dll" Alias "grf_close" (ByVal grf As Grf)
  62.     Public Declare Function GrfFree Lib "grf.dll" Alias "grf_free" (ByVal grf As Grf)
  63.  
  64.     Sub Main()
  65.         Try
  66.             Dim myGrf As Grf
  67.             Dim err As GrfError
  68.             Dim cb As GrfOpenCallback
  69.             myGrf = GrfOpen("data.gpf", "rb", err, cb)
  70.  
  71.  
  72.  
  73.  
  74.         Catch ex As Exception
  75.             MsgBox(ex.ToString)
  76.  
  77.         End Try
  78.     End Sub



in pratica sarebbe un file rar criptato ed usato per molti giochi.

e tipo ad una folder virtuale,
credo che questo tipo di file venga usato molto sulle directX per immagazzinare dati, audio, video e suoni.

l'errore che mi dà e codesto



System.Runtime.InteropServices.MarshalDirectiveException:
La firma del tipo del metodo non è compatibile con PInvoke.

l'errore lo restituisce al grfOpen

vi rilasco anche i sorgenti della classe come.


forse sarà un problema del c
che non puo far ritornare come valore un puntatore non saprei

spero che mi possiate aiutare
grazie mille.



Thejuster ha allegato un file: grf.zip (197730 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Thejuster il 07/02/2009 alle 1:19


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:46
Sabato, 07/02/2009
L'errore viene generato dal marshaler quando incontra un attributo MarshalAs che non sa gestire (preso da msdn). Dato che questo attributo specifica verso quale tipo di dato debba essere esportato un campo per il marshaling, presumo che la dichiarazione dei tipi non sia esatta, o non sia supportata... Ma anche disponendo del COMponente (XD), non credo di essere in grado di dire di più.

PM Quote