Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8

    Conversione da C++ a Visual Basic

    Salve,
    ho una dll da chiamare tramite visual basic. Mi hanno fornito solo un .h con le chiamate alle funzioni.
    In Visual Basic ho aperto un .bas e ho provato a scrivere le declare per le chiamate.
    Vi scrivo solo 2 esempi (in realtà le funzioni sono circa 30, ma capiti 2 esempi posso farlo per tutte).
    Potete dirmi se le ho scritte bene?
    Grazie a tutti

    2 funzioni sul .h
    short __declspec(dllexport) __stdcall OpenReader (HANDLE *hCom, unsigned char LinkType,char *com_port);

    short __declspec(dllexport) __stdcall Gen2ReadTag (HANDLE hCom,unsigned char MemBank,unsigned Addr,unsigned char Length,unsigned char * Data) ;

    le 2 funzioni nel .bas
    Public Declare Function OpenReader Lib "Reader.DLL" (ByRef hCom As Long, LinkType As Byte, ByRef com_port As Byte) As Integer

    Public Declare Function Gen2ReadTag Lib "Reader.DLL" (ByVal hCom As Long, ByVal MemBank As Byte, ByVal Addr As Byte, ByVal Length As Integer, ByRef Data As Byte) As Integer

  2. #2
    In linea di massima (supponendo che si stia parlando di VB6 e C++ su sistemi operativi a 32 bit) sono corrette, giusto qualche appunto:
    - nella seconda funzione Addr è dichiarato come unsigned, ossia unsigned int, ossia un intero a 32 bit senza segno; questa roba in VB6 non esiste, quello che più ci si avvicina (=>ha le dimensioni corrette) è un Long.
    - il com_port è dichiarato come char *, e suppongo venga usato per il passaggio di una stringa. Se è così, usa ByVal com_port As String.
    - unsigned char Length diventa ByVal Length As Byte, non As Integer;
    - unsigned char * Data probabilmente deve puntare ad un buffer di qualche genere, per cui non va bene la traduzione che ne hai fatto; difficile però darne una traduzione univoca se non si sa esattamente cosa la funzione vuole memorizzare in questo buffer.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    Grazie! Non speravo in una risposta così sollecita, infatti l'ho vista solo oggi.

    *Data deve contenere una stringa di caratteri, quindi potrebbe essere una String o una matrice di lunghezza determinata da lenght

    Nel primo caso posso provare il suggerimento che mi hai dato per *com_port.
    Nel secondo potrei provare a definire una matrice sufficientemente lunga, tipo Data(4096), che ne dici?

  4. #4
    Tenterei l'approccio della string; mi raccomando, ricordati, prima di chiamare la funzione, di fare sì che la stringa sia sufficientemente grande (ti basta riempirla di spazi).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    Grazie ancora!

  6. #6
    Di niente, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    Ciao, ho proseguito ma mi sono imbattuto in un nuovo problema, una funzione con chiamata ad un typedef:
    typedef struct
    {
    unsigned char TagType;
    unsigned char AntNum;
    unsigned char Ids[12];
    }TagIds;
    short __declspec(dllexport) __stdcall MultipleTagIdentify(HANDLE hCom, unsigned int TagType, unsigned char * Count,TagIds *value);

    ho provato a tradurla così:
    Type TagIds
    TagType As Byte
    AntNum As Byte
    Ids(12) As Byte
    End Type
    Public Declare Function MultipleTagIdentify Lib "Reader.DLL" (ByVal hCom As Long, ByVal TagType As Long, ByRef Count As Byte, ByRef value As TagIds) As Integer

    Che ne dici?

  8. #8
    Dovrebbe essere corretta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    ok grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    Il programma in VB6 è funzionante.
    Se volessi portarlo in VB.net (ho il 2005) come devo chiamare la dll?
    L'utilità di conversione mi lascia le chiamate precedenti ma poi in fase di esecuzione dà errore, non riesce ad aprire la dll.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.