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

API, COM et SDKs Delphi Discussion :

DLL delphi et ADDIN Outlook en Visual Basic


Sujet :

API, COM et SDKs Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut DLL delphi et ADDIN Outlook en Visual Basic
    Bonjour, je développe actuellement un addon Outlook et je suis bloqué sur le partie transfert de Variable de la DLL vers mon addon.
    Ma DLL est censé me retourner un PAnsiChar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res := PAnsiChar(AnsiString(s));
    Result := res;
    Seulement dans mon code VB je ne sais comment la récupérer. J'ai essayé la solution suivante mais l'application plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Declare Function AjoutMail Lib "DLMDLL.dll" Alias "Ajouter_une_piece_jointe_a_un_mail" () As String
    Dim temp As Object
    temp = AjoutMail()
    Merci de vos réponses

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par Skape252 Voir le message
    Bonjour, je développe actuellement un addon Outlook et je suis bloqué sur le partie transfert de Variable de la DLL vers mon addon.
    Ma DLL est censé me retourner un PAnsiChar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res := PAnsiChar(AnsiString(s));
    Result := res;
    Seulement dans mon code VB je ne sais comment la récupérer. J'ai essayé la solution suivante mais l'application plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Declare Function AjoutMail Lib "DLMDLL.dll" Alias "Ajouter_une_piece_jointe_a_un_mail" () As String
    Dim temp As Object
    temp = AjoutMail()
    Quelques remarques :
    • Temp est un object alors que la fonction renvoie un string
    • Delphi natif ou managé ? Visual Basic natif ou managé ? VBA ?
    • Une fonction qui renvoie une chaine ne me parait pas la meilleure façon de faire quand il s'agit de dll, en particulier entre 2 environnements de développements. J'utiliserais plutôt une procédure à laquelle on passe des variables PChar initialisées et gérées côté client (en l'occurrence ByRef String. Est ce une dll que vous avez écrite et dont vous avez les sources ?
    Philippe.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,
    Quelques remarques :
    • Temp est un object alors que la fonction renvoie un string
    • Delphi natif ou managé ? Visual Basic natif ou managé ? VBA ?
    • Une fonction qui renvoie une chaine ne me parait pas la meilleure façon de faire quand il s'agit de dll, en particulier entre 2 environnements de développements. J'utiliserais plutôt une procédure à laquelle on passe des variables PChar initialisées et gérées côté client (en l'occurrence ByRef String. Est ce une dll que vous avez écrite et dont vous avez les sources ?
    Tout d'abord merci de votre réponse.
    Pour l'objet temp c'est une omission de ma pars.
    Je développe sous Delphi 2010 et Visual Studio 2010, aucune idée s'il sagit de natif ou managé.
    Le problème c'est qu'en effet je n'ai pas écrit cette DLL, il me serait alors compliqué de tout reprendre pour remplacer la fonction par une procédure.
    J'ai cru comprendre que la solution pour réaliser ce passage de variable était d'utiliser les BSTR, mais je n'arrive pas à le mettre en oeuvre.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Attention, il faut penser au partage mémoire
    Une fonction ne peut JAMAIS renvoyer de PChar directement si il n'utilise pas un gestionnaire de mémoire partagée tel que ShareMem, FastShareMem (Delphi\C++Builder) ou COMString (tout langage gérant BSTR OLE)

    Il faut que ce soit l'appelant qui fournisse la zone mémoire approprié avec la taille maximale (incluant le zéro terminal)
    Avec un retour de PChar, Delphi alloue la mémoire mais qui la libère ?
    VB impossible => Erreur de Privilège ou Violation d'Accès

    Pour info :
    "natif ou managé" c'est un manière élégante pour désigner "Win32 ou .NET"

    En plus PChar en D2010 = PWideChar = 2 octets par caractère, à ne pas oublier lors de l'utilisation en VB
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Dans mon cas, c'est mon complément en VB(.net) qui appelle la DLL.
    Il faudrait donc que je définisse la zone mémoire dans mon programme VB. Et que mon application delphi renvoi un PWideChar ?!

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Citation Envoyé par Skape252 Voir le message
    Dans mon cas, c'est mon complément en VB(.net) qui appelle la DLL.
    Donc managé !

    Citation Envoyé par Skape252 Voir le message
    Il faudrait donc que je définisse la zone mémoire dans mon programme VB.
    Voir Interoperating with Unmanaged Code - Consuming Unmanaged DLL Functions
    Voir GCHandle, GCHandle.Alloc, GCHandle.ToIntPtr

    Citation Envoyé par Skape252 Voir le message
    Et que mon application delphi renvoi un PWideChar ?!
    Ce n'est pas ce que je disais, Delphi 2010 utilise par défaut le PWideChar via l'alias PChar, faut juste en avoir conscience !

    VB.Net utilise le même encodage normalement, StrLCopy fera très bien le boulot

    Tu peux en retour renvoyé le nombre de caractère, un peu comme l'API windows, GetWindowText

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function Ajouter_une_piece_jointe_a_un_mail(lpString: PChar; nMaxCount: integer): integer;
    begin
      // s est une chaine interne de la DLL qui contient déjà quelque chose
      CopyLStr(lpString, s, nMaxCount - 1);
      Result := Math.Min(Length(s), nMaxCount - 1);
    end;

    Pour, la version BSTR OLEChar, le type Delphi c'est WideString qui encapsule les API Windows qui gère un compteur de référence ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Ajouter_une_piece_jointe_a_un_mail(): WideString;
    begin
      // s est une chaine interne de la DLL qui contient déjà quelque chose
      Result := s;
    end;
    J'ignore totalement comment mappé cela en VB.NET !
    Le WideString, je l'utilise avec une TLB qui est utilisé en COM sous Delphi ou considéré presque comme une Assembly par .NET
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Skape252 Voir le message
    Dans mon cas, c'est mon complément en VB(.net) qui appelle la DLL.
    Il faudrait donc que je définisse la zone mémoire dans mon programme VB. Et que mon application delphi renvoi un PWideChar ?!
    Oui, allouer la mémoire sous vb.net puis passer les pointeurs à la procédure de la dll qui les "alimente".

    Concernant les String, vous avez la possibilité de préciser le jeu de caractères, Vous pouvez aussi préciser la convention d'appel.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    <DllImport("Votre.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.StdCall)>

    Voici un lien (en anglais) plus détaillé : Utiliser une dll Pascal avec .Net
    Philippe.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Pour résumer :
    • Importer la DLL sous VB.net
    • Allouer la mémoire sous VB.net
    • Appeler ma fonction sous VB.net
    • Faire en sorte que la fonction de ma DLL retourne un pointeur vers mon WideString que je souhaite récuperer
    • Récupérer ce WideString sous VB.net


    J'ai bon ? (Je m'excuse des questions qui peuvent paraître naïves mais je découvre ce nouveau langage et ses propriétés)

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Citation Envoyé par Skape252 Voir le message
    J'ai bon ?
    Si tu utilises PChar (PWideChar), l'allocation est nécessaire via GCHandle
    Si tu utilises WideString, c'est OLE qui s'en charge !

    tu mélanges les deux approches !

    Citation Envoyé par Skape252 Voir le message
    (Je m'excuse des questions qui peuvent paraître naïves mais je découvre ce nouveau langage et ses propriétés)
    Tu découvres le Delphi ou le VB.NET ?
    Pense qu'il y a une Rubrique VB.Net, la communauté de ce section sera plus précise pour ce qui concerne les subtilité du code-managé utilisant du code-non-managé !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu découvres le Delphi ou le VB.NET ?
    Je découvre le VB.NET.
    J'essaye tous ça et reviens vers vous pour vous informer du résultat

  11. #11
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Je dirais :
    • Importer la DLL sous VB.net
    • Allouer la mémoire sous VB.net
    • Appeler ma fonction sous VB.net en lui passant en paramètre le pointeur de la mémoire allouée, ce qui sous-entend que la fonction delphi a été modifiée pour accepter ce type de paramètre (prévoir un 2° paramètre indiquant la taille maximale du 1°)
    • Faire en sorte que la fonction de ma DLL retourne un pointeur vers mon WideString que je souhaite récuperer alimente la zone allouée dont elle a reçu l'adresse en paramètre (=copie de la variable res évoquée dans le 1° message)
    • Récupérer ce WideString sous VB.netC'est inutile car la fonction aura rempli la zone mémoire allouée par VB.Net...
    Philippe.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Après discussion avec la personne qui me demande ce projet. Il semblerait que je sois forcé de ne pas modifier la DLL, je m'explique.
    La DLL est utilisé pour plusieurs addons (Thunderbird, Eudora, ...)
    Je dois donc trouver un moyen de récupérer mon lien en modifiant simplement le projet VB.net. ( J'ai aussi pensé à créer une deuxième DLL qui pourrait appeler la première et faire la liaison entre mon addon et ma première DLL. Mais cette solution semble pas réellement élégante )
    Ma DLL renvoi donc un PWideChar pointant sur une chaîne de caractère.

    Et mon code VB.net (je posterais une discussion dans la partie VB si personne ne peut m'aider. Pour l'instant vous avez réussie à m'aiguiller parfaitement )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Imports Outlook = Microsoft.Office.Interop.Outlook
    Imports Microsoft.Office.Core
     
    <Runtime.InteropServices.ComVisible(True)> _
    Public Class Ribbon
        Implements Office.IRibbonExtensibility
        'permet l'utilisation de la dll
        Declare Function AjoutMail Lib "DLMDLL.dll" Alias "Ajouter_une_piece_jointe_a_un_mail" () As String
     
        'déclaration du ruban pour surcharger le principal
        Private ribbon As Office.IRibbonUI
        Dim MailItem As Outlook.MailItem
     
        'fonction qui permet d'intérargir avec le ruban d'outlook 2010
        Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
            Return GetResourceText("DLMOutlookAddIn2010.Ribbon.xml")
        End Function
     
        'fonction appelée au click sur le bouton pièce jointe
        Public Sub Attach(ByVal control As IRibbonControl, ByRef cancelDefault As Boolean)
            'permet de récupérer l'objet email que l'utilisateur vient de créer
            MailItem = TryCast(ThisAddIn.outApp.ActiveInspector().CurrentItem, Outlook.MailItem)
            Dim temp As String
            Dim count As Integer
     
            'lance la fonction qui apple dlm
            temp = AjoutMail()
     
            'si renvoie pas -1
            If temp <> "-1" Then
     
                'click passe à True pour dire que le bouton a bien été clické
                ThisAddIn.click = True
                'Mise en pièce jointes du html
     
                MailItem.Attachments.Add(temp)
                'sinon
            Else
                'on compte le nb de pièce jointe
                count = MailItem.Attachments.Count
                MsgBox("annulation de l'envoie de pièce jointe")
                'on supprime la dernière ajouté
                MailItem.Attachments.Remove(count)
            End If
            'permet de ne pas lancer la fenêtre de recherche de fichiers par défault (outlook)
            cancelDefault = True
        End Sub
     
    End Class
    Merci

    Edit : A savoir que la ça marche sur ma machine de développement mais lorsque je déploie la solution sur une machine de test j'ai le droit à un jolie "Outlook ne répond plus"... Ma machine de développement est sur XP et celle de test sous Seven. Cela pourrait il venir de ça ? XP serait il plus permissif que seven ?

  13. #13
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Skape252 Voir le message
    Ma DLL renvoi donc un PWideChar pointant sur une chaîne de caractère.
    Ok, donc pas de problème de partage, on a un pointeur, il suffit de copier cette chaine dans un WideString pour la manipuler ensuite si besoin.
    Citation Envoyé par Skape252 Voir le message
    Edit : A savoir que la ça marche sur ma machine de développement mais lorsque je déploie la solution sur une machine de test j'ai le droit à un jolie "Outlook ne répond plus"... Ma machine de développement est sur XP et celle de test sous Seven. Cela pourrait il venir de ça ? XP serait il plus permissif que seven ?
    Certain que 7 est plus strict que XP.
    La machine de dev et de test ont-elles la même version d'Outlook ? paramétrée à l'identique ? les sessions dev et test disposent-elles des mêmes droits ?
    Philippe.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Certain que 7 est plus strict que XP.
    La machine de dev et de test ont-elles la même version d'Outlook ? paramétrée à l'identique ? les sessions dev et test disposent-elles des mêmes droits ?
    Les deux machines ont la même version d'Outlook, paramétrée à l'identique. Les deux sessions sont toute deux en administrateur. Étrange ...

  15. #15
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Skape252 Voir le message
    Les deux machines ont la même version d'Outlook, paramétrée à l'identique. Les deux sessions sont toute deux en administrateur. Étrange ...
    Il ne reste plus qu'à tracer finement l'application pour voir où se produit la perte de contact...
    Philippe.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    La perte se produit entre la DLL et l'addon Outlook au moment de récupérer la valeur de retour de ma fonctions au sein de ma DLL.
    Je me demande si la DLL ne se "fermerais" pas avant que je puisse récupérer ma valeur ?!

    Y'a t'il un moyen de tracer les différents passages Addon -> DLL -> Application -> DLL -> Addon ?

    EDIT : J'ai essayé de crée une DLL vide pour tester les retour de variable et même avec l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    library DLMDLL2;
     
    { Remarque importante concernant la gestion de mémoire de DLL : ShareMem doit
      être la première unité de la clause USES de votre bibliothèque ET de votre projet
      (sélectionnez Projet-Voir source) si votre DLL exporte des procédures ou des
      fonctions qui passent des chaînes en tant que paramètres ou résultats de fonction.
      Cela s'applique à toutes les chaînes passées de et vers votre DLL --même celles
      qui sont imbriquées dans des enregistrements et classes. ShareMem est l'unité
      d'interface pour le gestionnaire de mémoire partagée BORLNDMM.DLL, qui doit
      être déployé avec vos DLL. Pour éviter d'utiliser BORLNDMM.DLL, passez les
      informations de chaînes avec des paramètres PChar ou ShortString. }
     
    uses
      SysUtils,
      Classes;
     
    {$R *.res}
     
    function Recuperer_lien_telechargement: String; stdcall;
    var
    Lien : String;
     
    begin
      Lien:= 'C:\Documents and Settings\Administrateur\Mes documents\RAD Studio\Projets\Download Manager 2\temp\501\aa txt.html';
     
      Result:= Lien;
     
    end;
     
    exports Recuperer_lien_telechargement name
      'Recuperer_lien_telechargement';
     
    end.
    Et le code VB.net suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <Runtime.InteropServices.ComVisible(True)> _
    Public Class Ribbon
        Implements Office.IRibbonExtensibility
        'permet l'utilisation de la dll
        Declare Function AjoutMail Lib "DLMDLL2.dll" Alias "Recuperer_lien_telechargement" () As String
     
        'déclaration du ruban pour surcharger le principal
        Private ribbon As Office.IRibbonUI
        Dim MailItem As Outlook.MailItem
     
        Public Sub New()
        End Sub
     
        'fonction qui permet d'intérargir avec le ruban d'outlook 2010
        Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
            Return GetResourceText("DLMOutlookAddIn2010.Ribbon.xml")
        End Function
     
        'fonction appelée au click sur le bouton pièce jointe
        Public Sub Attach(ByVal control As IRibbonControl, ByRef cancelDefault As Boolean)
            'permet de récupérer l'objet email que l'utilisateur vient de créer
            MailItem = TryCast(ThisAddIn.outApp.ActiveInspector().CurrentItem, Outlook.MailItem)
            Dim temp As String
            Dim count As Integer
     
            'lance la fonction qui apple dlm
            temp = AjoutMail()
     
            'si renvoie pas -1
            If temp <> "-1" Then
     
                'click passe à True pour dire que le bouton a bien été clické
                ThisAddIn.click = True
     
                'Mise en pièce jointes du html
                MailItem.Attachments.Add(temp)
     
                'sinon
            Else
                'on compte le nb de pièce jointe
                count = MailItem.Attachments.Count
                MsgBox("annulation de l'envoie de pièce jointe")
                'on supprime la dernière ajouté
                MailItem.Attachments.Remove(count)
            End If
            'permet de ne pas lancer la fenêtre de recherche de fichiers par défault (outlook)
            cancelDefault = True
        End Sub
    End Class
    Même avec cette exemple simple, cela ne fonctionne pas.
    Je suppose que je fais quelque chose de la mauvaise manière.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    N'ayant pas trouvé de solutions face à mon problème de transfert de variable, j'ai trouvé une solution un peu "brouillon" mais qui fonctionne correctement.

    La DLL crée simplement un fichier texte avec le contenue de ma variable, et mon Addin va lire ce fichier texte et récupérer son contenu dans une variable que je pourrais utiliser par la suite.

    Si cette solution peux en aider certains ...

    Merci de vos réponses !

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

Discussions similaires

  1. ms outlook et visual basic
    Par nouvinfo dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/01/2011, 00h21
  2. Ecrire un mail Outlook avec Visual Basic 2008 Express
    Par Pingouin1313 dans le forum VB.NET
    Réponses: 7
    Dernier message: 28/10/2009, 22h38
  3. Réponses: 0
    Dernier message: 13/08/2009, 17h45
  4. Utiliser une DLL en Delphi avec Visual Basic
    Par jix69 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 25/11/2008, 02h32
  5. Réponses: 1
    Dernier message: 07/07/2006, 15h49

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