IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Code VB6 vers Delphi ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut Code VB6 vers Delphi ?
    bonjour à tous,

    J'ai un programme de démo (qui fonctionne très bien) dont j'ai les
    sources en VB6 et j'aimerais en adapter une partie en delphi, mais je
    ne sais pas du tout comment faire...

    Ce programme fait appel à des fonctions d'une dll, j'ai la description
    des fonctions en syntaxe de langage C, j'ai réussi à écrire la
    déclaration en delphi mais quand j'appelle ces fonctions depuis mon
    programme je n'obtiens pas le résultat attendu alors que visiblement
    l'appel de ces fonctions depuis le programme de test en VB6 est ok.

    Quelqu'un pourrait-il m'aider ou me dire comment faire pour adapter le
    prog vb6 en delphi ??

    merci

    Isa

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 874
    Points : 11 363
    Points
    11 363
    Billets dans le blog
    6
    Par défaut
    la convention de passage des paramètres à la dll est par défaut register en delphi, mais sûrement autre en VB (stdcall ?)

    autre possibilité : variables de taille spécifique selon le langage : bien vérifier la longueur des entiers...

  3. #3
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Est-ce que tu pourrais donner quelques exemples VB6 de déclaration des tes méthodes contenues dans la DLL ? Nous pourrions alors tenter de traduire vers Delphi

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Merci de votre aide, alors accrochez vous ça va être long.

    D'après la doc du fournisseur, voilà comment doit se dérouler le programme:
    1. Appel de la fonction SetCIHandle()
    2. Appel de la fonction SetImmDataHandle
    3. Appel de la fonction InitCISharedMem()
    Si la valeur de retour est 0 on peut continuer (sinon refaire à partir de l'étape 2)
    4. Ecrire :OK: dans la mémoire partagée en appelant la fonction WriteCISharedMem, si la valeur de retour est 0 on peut continuer.
    5. en boucle, utiliser la fonction ReadCISharedMem pour lire le contenu de la mémoire partagée.

    Dans mon programme, c'est ok jusqu'à l'étape 4. La fonction WriteCISharedMem me renvoie toujours -1 (c'est à dire une erreur s'est produite lors de l'écriture dans la mémoire partagée) du coup je ne peux aller plus loin.
    Si j'essaie tout de même d'appeler la fonction ReadCISharedMem, elle me renvoie toujours 0 (c'est à dire aucune donnée lue même quand je sais qu'il y a des données)
    le prog visual basic utilisé en simultané me récupère bien les données.

    Voici la description des fonctions (d'après la doc du fournisseur) en langage C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void SetCIHandle(HANDLE CIHandle, int MsgId, int StreamNo);
    void SetImmDataHandle(HANDLE ImmDataHandle, int MsgId, int StreamNo);
    int InitCISharedMem(int StreamNo);
    int WriteCISharedMem(char *data, int StreamNo);
    int ReadCISharedMem(char *data, intStreamNo);
    Voilà l'appel que je fais dans Delphi (mais peut-être je n'ai pas utilisé le bon type pour les variables ???):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure SetCIHandle(CIHandle: HWND; MsgID: longint; StreamNo: longint); stdcall; external 'Bcwin.dll';
    procedure SetImmDataHandle(ImmDataHandle: THandle; MsgID: integer; StreamNo: integer); stdcall; external 'Bcwin.dll';
     
    function ReadCISharedMem(var data: PChar; StreamNo: integer): integer; stdcall; external 'Bcwin.dll';
    function InitCISharedMem(StreamNo: integer): integer; stdcall; external 'Bcwin.dll';
    function WriteCISharedMem(data: PChar; StreamNo: longint):integer; stdcall; external 'Bcwin.dll';
    Un exemple de l'utilisation qui est faite (et qui marche) dans mon programme en VB6:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        FCall.FunctionName = "WriteCISharedMem"
        s = StrConv(txt1 & vbNullChar, vbFromUnicode)
        rc = FCall.CallFunction(VarPtr(s(0)), StreamNo1)
    Voilà, en espérant avoir été assez claire ;-)

    à bientôt,

    Isa

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    J'ai revu mon programme de A à Z en suivant la petite doc que je vous ai faite, j'ai modifié mes noms de variable pour avoir quelquechose de plus cohérent et miracle, j'ai réussi à faire fonctionner mon programme !!!

    Isa

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage d'un code AutoIt vers Delphi (pour une dll MMB)
    Par Frencher dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 20/09/2012, 18h45
  2. [WD14] Conversion code VB6 vers Windev14
    Par antasalam dans le forum WinDev
    Réponses: 1
    Dernier message: 07/10/2011, 08h13
  3. Traduction code VB6 vers PB
    Par DarkVader dans le forum PureBasic
    Réponses: 19
    Dernier message: 29/09/2010, 11h36
  4. Conversion code VB6 vers VB.NET
    Par dakota77 dans le forum VB.NET
    Réponses: 4
    Dernier message: 15/06/2008, 23h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo