Discussion: VB.net et dll Delphi

  1. #1
    Membre actif Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2005
    Messages : 238
    Points : 268
    Points
    268

    Par défaut VB.net et dll Delphi

    Bonjour à tous,

    première fois que je met les pieds dans cette partie du forum car je travaille exclusivement en Pascal objet avec l'EDI Delphi, d'où mon problème quand je m'aventure avec VB.net

    Le problème est le suivant : j'ai créé une dll avec Delphi XE10, avec une fonction à l'intérieur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function DllTest2(sName: string): string;StdCall;
    begin
    	result:='Bienvenue '+sName ;
    end ;
    Mon but maintenant est d'appeller cette dll en VB.net.

    Mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class Form1
        Private Declare Auto Function DllTest2 Lib "C:\Users\Utilisateur\Documents\MyDll.dll" Alias "DllTest2" (sname As String) As String
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim maPhrase As String
            maPhrase = DllTest2("merlin")
        End Sub
     
     
    End Class
    En executant ce code, j'ai l'erreur suivante :

    Nom : Erreur.jpg
Affichages : 31
Taille : 69,8 Ko

    J'utilise Visual Studio 2013 avec le framework 4 ou 4.5.

    Quelqu'un peut-il m'aider sur ce sujet ?
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  2. #2
    Membre averti Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    août 2014
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 193
    Points : 329
    Points
    329

    Par défaut

    Citation Envoyé par Cpt Anderson Voir le message
    En executant ce code, j'ai l'erreur suivante :

    Nom : Erreur.jpg
Affichages : 31
Taille : 69,8 Ko
    Salut,
    Après une petite recherche sur le web. Il y a notamment cela.
    Merci de ainsi que d'utiliser les boutons et

  3. #3
    Membre actif Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2005
    Messages : 238
    Points : 268
    Points
    268

    Par défaut

    Citation Envoyé par r.morel Voir le message
    Salut,
    Après une petite recherche sur le web. Il y a notamment cela.
    Bonjour, les deux systèmes d'exploitations sont les mêmes : Windows 7 64 bits.
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net et Delphi
    Inscrit en
    juillet 2002
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net et Delphi
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2002
    Messages : 629
    Points : 1 424
    Points
    1 424

    Par défaut

    Bonjour,
    Les types string en Delphi et DotNet ne sont pas compatibles. Il faut passer par un PChar qui correspond à un PWideChar depuis Delphi 10 si ma mémoire est bonne :

    Code Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function DllTest(sName: PChar) : PChar; StdCall;
    var s : String;
    begin
        s := 'Hello ' + sName;
        result := PChar(s);
    end;
    Code VB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Declare Auto Function DllTest Lib "D:\Dev\DelphiXE10\TestDll\Win32\Debug\myDll.dll" Alias "DllTest" (sname As String) As IntPtr
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Dim Msg As String = Marshal.PtrToStringAuto(DllTest("World"))
    End Sub

  5. #5
    Membre actif Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2005
    Messages : 238
    Points : 268
    Points
    268

    Par défaut

    Bonjour,

    merci pour la réponse mais le problème ne semble pas venir de là, l'erreur est :

    tentative de chargement d'un programme de format incorrect
    Certainement au chargement de la dll Delphi.

    Nom : Erreur.jpg
Affichages : 12
Taille : 69,8 Ko
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .Net et Delphi
    Inscrit en
    juillet 2002
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net et Delphi
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2002
    Messages : 629
    Points : 1 424
    Points
    1 424

    Par défaut

    Effectivement, c'est une autre erreur. Le lien de r.morel aurait pu te mettre sur la voie : Ta Dll doit être compilée en 64 bit et ton programme en 32 ou l'inverse.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/07/2006, 16h44
  2. Tuto DLL delphi .NET
    Par the big ben 5 dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 17/01/2006, 10h15
  3. DLL Delphi utilisée sous VB.NET
    Par slimjoe dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 00h12
  4. [VB.NET] Comment gérer une DLL Delphi ?
    Par slimjoe dans le forum VB.NET
    Réponses: 2
    Dernier message: 09/01/2006, 00h10
  5. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 10h07

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