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

Delphi Discussion :

Utilisation d'une dll Delphi10 sous VB.net


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut Utilisation d'une dll Delphi10 sous VB.net
    Bonjour,

    Je dois utiliser une dll écrite en Delphi10 dans une application VB.net, j'arrive à accéder à certaines fonctions de cette dll (une, pour l'instant ), mais pas vraiment à ce dont j'ai besoin.

    Je n'y connais strictement rien en Delphi, je me débrouille seulement en VB.net. J'ai posé la même question dans la section VB.Net du forum, mais pour l'instant je n'ai pas de réponse là bas, comme la question est à cheval sur les 2 langages je me permet de poser aussi la question ici .

    Voici le lien vers les détails de mon problème:

    https://www.developpez.net/forums/d1...0-sous-vb-net/

    Merci de votre aide!

    Corentin

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    sans être un as de la dll je vois au moins un problème (après avoir regardé la question sur VB.Net
    Code VisualBasic : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Auto Function SmartkeyGetOption Lib "E:\DLL References\smDll.dll" (obj As Integer) As IntPtr
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    function SmartkeyGetOption(ProgOption: Integer): PChar; stdcall;
    la fonction Delphi renvoi un pointeur de chaine et on un pointeur d'entier comme déclaré en VB.net
    Ensuite la question est la dll Delphi a été écrite avec une version inférieure à D2009 (apparition de l'Unicode chez Delphi) ou pas ?
    Dans le premier cas PChar est un PAnsiChar mais dans le second c'est un PWideChar même s'il s'agit dans les deux cas d'un pointeur sur une chaine de caractères

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut
    Merci pour votre réponse,

    Je n'y connais rien en Delphi... Je ne sais donc pas vous dire si a dll Delphi a été écrite avec une version inférieure à D2009. Le code source a très bien pu être écrit avant 2009 mais mis à jour ultérieurement, je n'en sais rien. J'ai accès au code source de la dll en question et à un poste développeur avec D10 Berlin. Si vous me dites comment le savoir je dois pouvoir fouiller et trouver la réponse à cette question!

    EDIT : à priori ça a été écrit en Delphi7

    Par ailleurs si je change le type de sortie de la fonction VB.Net de IntPtr en Object j'obtient une autre erreur :
    Nom : Capture.JPG
Affichages : 200
Taille : 39,6 Ko

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Re,
    Je n'y connais rien en Delphi.
    moi c'est en VB.net que je n'ai pas les connaissances nécessaires

    Si vous avez les sources et accès à Delphi Berlin alors vous devriez pour recompiler la DLL (en 32 et en 64 bits) et de ce fait être sûr que PChar fait référence a un PWideChar (enfin pas sûr à 100% il est toujours possible de modifier certaines préférences mais je pars du principe que c'est une version non customisée)

    Par ailleurs si je change le type de sortie de la fonction VB.Net de IntPtr en Object
    J'avoue, je nage, VB.net et moi cela fait bien 2

    Que feriez vous si cette même Dll était écrite en C ? Le fait que la dll soit en delphi et non en c n'a aucune importance car si vous regardez le source vous y verrez un petit stdcall; instruction qui, pour vulgariser à l'extrême, indique au compilateur Delphi que le passage des paramètres se fera comme pour une blibliothèque C.
    Vous trouverez sur le net beaucoup de pistes (Delphi+dll+vb.net+pchar)

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Idem j'y connais rien en VB et moins en .Net vu que la fonction de la fonction de la DLL renvoie une chaîne de caractères

    pourquoi pas juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Auto Function SmartkeyGetOption Lib "E:\DLL References\smDll.dll" (obj As Integer) As String
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 932
    Billets dans le blog
    6
    Par défaut
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Auto Function SmartkeyGetOption Lib "E:\DLL References\smDll.dll" (ByVal OptNum As Integer) As String
    En VB.Net, le type Char est sur 2 octets, et le type string est Unicode, si j'en crois ceci.
    Il y a donc un risque de recevoir une chaîne AnsiChar et de la considérer comme WideChar : utiliser un tableau de Byte pour recevoir la chaîne ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Utilisation d'une dll Delphi10 sous VB.net
    Par khaourantin dans le forum VB.NET
    Réponses: 0
    Dernier message: 16/10/2018, 11h37
  2. Utiliser une DLL ecrite en VB.NET sous Delphi
    Par vg-matrix dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2012, 11h50
  3. Réponses: 0
    Dernier message: 01/06/2010, 15h17
  4. [.NET] utiliser une dll c++ sous excel
    Par ooxoo dans le forum VC++ .NET
    Réponses: 7
    Dernier message: 04/04/2008, 09h43
  5. Réponses: 9
    Dernier message: 06/04/2006, 18h40

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