Newsgroup: it.comp.lang.visual-basic
Titolo: [?] aiuto su DLL da C

la questione è lunga e complicata...
ho scaricato una DLL contenente funzioni per scompattare file ZIP e leggere
informazioni relative ai file contenuti nell'archivio.
le funzioni contenute nella DLL (Unzip32) sono spiegate in un file di testo.
solo che i parametri sono i C, e io non so come tradurli esattamente in VB.
vi faccio alcuni esempi su cui mi sono impiantato.
********************************************************
HARC WINAPI UnZipOpenArchive(const HWND hWnd,LPCSTR szFileName,
    const DWORD dwMode);
-----------------------------------------------------------------------
No. 21
Description
        Open file in archive file.
        File is checked if it is a legal file in the archive and
        a file handle to the file is returned when it is a legal file.
 All file operation in this file will require this file handle.
 It is necessary to call UnZipCloseArchive function when
 ending access to the file.
Parameter
 hWnd  Window handle calling UNZIP32.DLL
 szFileName Archive file name
 dwMode  Process mode flag. Current mode is a 'or' ('|')
   of the following constants]
  M_INIT_FILE_USE  Use values in Windows Registry
  M_REGARDLESS_INIT_FILE Do not use values in Windows Registry
  M_NOT_USE_TIME_STAMP Skip time stamp check
  M_EXTRACT_REPLACE_FILE Replace file by extracting file when
     file already exists and file in archive
     has more recent date
  M_EXTRACT_NEW_FILE Extract only if file does not exist
  M_EXTRACT_UPDATE_FILE Extract if file does not exist or when
     file in archive has more recent date
  M_CHECK_ALL_PATH Use complete path to search file
  M_CHECK_FILENAME_ONLY Match only file name to search file
  M_CHECK_PATH  Search using methodology compatible to
                                        "-p1" option
  M_CHECK_DISK_SIZE Check free disk space before extracting
                                        file
  M_REGARDLESS_DISK_SIZE Do not check free disk space before
     extracting file
  M_USE_DRIVE_LETTER Use drive letter in archive file when
     extracting file
  M_NOT_USE_DRIVE_LETTER Do not use drive letter in archive file
  M_INQUIRE_DIRECTORY Confirm when creating new directory
  M_NOT_INQUIRE_DIRECTORY Do not confirm when creating new directory
  M_INQUIRE_WRITE  Confirm before overwrite
  M_NOT_INQUIRE_WRITE Do not confirm overwrite
  M_CHECK_READONLY Skip read-only file
  M_REGARDLESS_READONLY Try extracting read-only file
  M_REGARD_E_COMMAND Extract command using 'E' command
  M_REGARD_X_COMMAND Extract command using 'X' command
  M_ERROR_MESSAGE_ON Display error message
  M_ERROR_MESSAGE_OFF Do not display error message
  M_BAR_WINDOW_ON  Display extraction status dialog
  M_BAR_WINDOWS_OFF Do not display extraction status dialog
  M_MAKE_INDEX_FILE Create index file
  M_NOT_MAKE_INDEX_FILE Do not create index file
Return Code
 File handle to extracted file.
 NULL when there is an error.
Comment
 Depending of version, number of handle that could be processed at once
differ
********************************************************
una funzione così, coma la traduco in VB?
innanzitutto, cosa vuol dire quell'HARC iniziale? sembra essere il tipo di
dati della funzione stessa. ma in VB a cosa corrisponde? ho pnesato che si
trattasse di un tipo da definire, legato alla DLL. ma in seguito, nel file,
non c'è nessuna spiegazione.
Poi, const HWND hWnd, che significa? cosa è const? e HWND che tipo di dati
è? dovrebbe corrispondere alla "Window handle calling UNZIP32.DLL", ma di
che si tratta esattamente? c'entra qualcosa con la proprietà hWnd del form
attivo, corrente?
Poi, const DWORD dwMode come si traduce? come si traduce WORD e DWORD?
dovendo rappresentare uan modalità, ci dovrebbero essere scritti i valori
delle costanti. invece nel fiel di testo non c'è scritto niente...
come devo procedere?
altri problemi li sto incontrando con questa dichiarazione di tipo.
EXTRACTINGINFO Data Structure
-----------------------------------------------------------------------
Structure Defintion
  typedef struct {
   DWORD dwFileSize;
   DWORD dwWriteSize;
   char szSourceFileName[FNAME32_MAX + 1];
   char dummy1[3];
   char szDestFileName[FNAME32_MAX + 1];
   char dummy[3];
  }  EXTRACTINGINFO
DWORD significa Long?
e quel char che cosa indica? e quei numeri tra parentesi quadre? e quel
FNAME32_MAX + 1?
lo so che è una domandona lunga e seccante, ma vi prego di aiutarmi.
Mario

  }  EXTRACTINGINFO
Questa dovrebbe essere
Type EXTRACTINGINFO
    dwFileSize As long
    dwWriteSize As long
    szSourceFileName As String *(FNAME32_MAX + 1)
    dummy1 As String * 3
    szDestFileName As String * (FNAME32_MAX + 1)
    dummy As String * 3
End Type
FNAME32_MAX _dovrebbe_ essere 256.
Ciao

  }  EXTRACTINGINFO


madò sei stato gentilissimo.
involontariamente hai risposto anche alla mia ultima domanda, con quel
provvidenziale suggerimento su ByRef Any.
non so come ringraziarti...
Mario

Indirettamente mi hai chiarito molti dubbi e adesso ho unapproccio +
scientifico alla traduzione c->vb (prima andavo un po' ad occhio)
in qualità di osservatore non posso che dire: grazie 1000!!!
Bruno