Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    DLL scritta in C su VB6

    ciao ragazzi sto cercando di far girare una dll scritta in C su vb6
    allora in C c'e' la libreria .h che specifica come utilizzare la seguente DLL, questa dll serve per la comunicazione del mio cellulare con vb
    ecco il codice in C per la conessione che restituisce:

    /*
    Connects to device on com port specified by string,
    eg "//./COM4" or "/dev/tty8"
    comport: port to connect on
    returns 1 on success
    -1 on failing to open com port
    -2 on failing to get com port state
    -3 on failing to set a new com port state
    -4 on failing to get IMEI
    -5 on failing OBEX connection sequence
    -6 on failing directory list request, phone info request or other
    */
    int lgConnect(const char *comport);


    Ecco il codice scritto da me in VB6:

    Declare Function Connect Lib "libgthing.dll" Alias "lgConnect" (ByVal hgdiobj As String) As Integer

    Private Sub Command1_Click()
    Dim X As Integer
    X = Connect("//./COM3")
    End Sub


    Tramite il seguente Codice, il cellulare comunica con il PC infatti sul cell esce la scritta CONESSO pero' VB si blocca dicendomi:

    Runtime 49 -> Convenzione di chiamata DLL non valida

    è non mi ritorna nessun tipo di valore...
    come devo fare per far comunicare il cell ?? senza restituirmi errore..

    Cordiali saluti !!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    I .h sono file include, non librerie. La libreria, semmai, e' la dll stessa.

    In ogni caso, puoi mostrare il contenuto del .h ?

  3. #3

    File.h

    ecco il file .h =>


    #ifndef _LGU81X0_H_
    #define _LGU81X0_H_

    #ifdef __cplusplus
    extern "C" {
    #endif

    #ifndef WIN32
    #define __stdcall
    #endif

    typedef void (__stdcall *progressCallback)(int);

    /*
    Register a progress callback
    p: callback function;
    The callback function is passed numbers between 0 and 100 to indicate
    the progress of a function call. Pass NULL to disable
    */
    void lgProgressCallback(progressCallback p);

    /*
    Connects to device on com port specified by string,
    eg "//./COM4" or "/dev/tty8"
    comport: port to connect on
    returns 1 on success
    -1 on failing to open com port
    -2 on failing to get com port state
    -3 on failing to set a new com port state
    -4 on failing to get IMEI
    -5 on failing OBEX connection sequence
    -6 on failing directory list request, phone info request or other
    */
    int lgConnect(const char *comport);

    /*
    Disconnects from device. Has no error checking nor does it check
    to see if we are actually connected
    */
    void lgDisconnect(void);

    /*
    Get a localised directory name for use with
    lgSomething(., dir,..) operations
    */
    const char *lgAUDIOS(void);
    const char *lgVIDEOS(void);
    const char *lgIMAGES(void);
    const char *lgDirectories(void);

    /*
    Returns true if we are connected
    */
    int lgIsConnected(void);

    /*
    Gets a file from device in directory
    filename: name file has on device
    dirname: directory file is in
    &filesize: output file size
    returns file data or NULL on file not found
    */
    unsigned char *lgGetFile(const char *filename, const char *dirname,
    unsigned int *filesize);

    /*
    Puts a file on the device into directory
    filename: name file will have on device
    directory: directory to put file in
    filesize: filesize as number of bytes
    data: file data
    returns true on success
    */
    int lgPutFile(const char *filename, const char *dirname,
    unsigned int filesize, unsigned char *data);

    /*
    Rename a file within a directory
    directory: directory the file is in
    oldFilename: filename on the device
    newFilename: filename to rename to
    returns true on success
    */
    int lgRenameFile(const char *directory, const char *oldFilename,
    const char *newFilename);

    /*
    Delete file from directory
    directory: directory to delete from
    filename: name of file to delete
    returns true on success
    */
    int lgDeleteFile(const char *directory, const char *filename);

    /*
    Get a list of files in a specific directory
    directory: directoy to list
    returns colon ':' separated file names, NULL if failed
    */
    const char *lgFileList(const char *directory);


    /*
    Force a keepalive message to be send. These are usually autmoatically
    taken care of but you may need to end a file transfer with one of
    these for it to work properly.
    */
    void lgKeepAlive(void);

    /*
    Get IMEI number from phone. Only available after connection
    */
    const unsigned char *lgGetIMEI(void);

    /*
    Cancel a file upload or download
    */
    void lgBreakOperation(void);

    #ifdef __cplusplus
    }
    #endif

    #endif

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il valore restituito dalla lgConnect e' un int che e' un intero a 32 bit equivalente al Long del VB e non all' Integer. Prova quindi

    Declare Function Connect Lib "libgthing.dll" Alias "lgConnect" (ByVal hgdiobj As String) As Long

  5. #5

    reply

    Già provato si conette ... pero' vb dice
    Error runtime '49' Convenzione di chiamata DLL non valida..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fermo restando quello che ti ho detto sull' int, c'e' da dire che VB ammette le chiamate a funzioni esterne con la convenzione di chiamata

    __stdcall

    Tutte le funzioni devono lavorare con tale convenzione e quindi la DLL andrebbe ricompilata con tale indicazione in tutte le funzioni. Ma, confermamelo, tu non hai i sorgenti ...

  7. #7

    Risposta!!

    NO non ho i sorgenti...
    Quindi come posso fare? Esiste un Metodo per adattarla a VB6 ?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'unico metodo e' scrivere una seconda DLL le cui funzioni seguano lo standard di chiamata __stdcall e che, a sua volta, chiami le funzioni della prima DLL usando la convenzione di chiamata da questa richiesta (una wrapper dll).

    Ad esempio, crei una DLL che puoi chiamare

    vblibgthing.dll

    in cui scrivi la funzione lgConnect con la convenzione di chiamata del VB (__stdcall) che, al suo interno, non fa altro che chiamare la corrispondente funzione della DLL originale.
    Questo per tutte le funzioni.

    Non c'e' altro modo che io conosca.

  9. #9

    Risposta!

    Ho trovato i sorgenti della DLL
    essendo una DLL Open-Source.. pero' non so come compilarla in modo che funzioni in VB potresti compilarla tu?

    Ecco i sorgenti:
    http://www.megaupload.com/?d=Z9PJL5Q7


    Scusami per il tempo che ti sto facendo perdere.. !!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Purtroppo il tempo che ci vuole per metterla a posto non e' poco ...

    Al momento non posso perche' sono molto impegnato ...

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.