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 :

Partager une DLL


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut Partager une DLL
    Bonjour,

    je dois partager une DLL créée en Delphi avec un autre programme non Delphi (Autoplay Media Studio 6).
    Dans ma DLL, j'ai des fonctions qui doivent renvoyer des informations sous forme de caractère, seulement quand j'utilise le String (avec ShareMem et la DLL), l'application (AMS6) se plante.
    Quand j'utilise du shortstring, l'application se plante aussi et quand j'utilise du pChar, j'obtiens une valeur nulle ...

    Quelqu'un aurait il une idée de comment faire passer des paramètres de type caractère entre ses 2 applications?

    Dans la doc de AMS, il est spécifié qu'il est préférable d'utiliser des DLL C/C++, j'ai donc essayer d'utiliser cdcel mais rien n'y fait

    Je suis preneur de toute idée

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Quelqu'un aurait il une idée de comment faire passer des paramètres de type caractère entre ses 2 applications?
    Pour la compatibilité avec C/C++ utilises des chaines AZT.

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Chaine: array[0..4095] of char;
    En C la notion de chaine de caracteres n'existe pas.
    On utilise des tableaux de base d'indice 0 avec un caractere null #0 pour indiquer la fin.
    A la lecture de la chaine un pointeur se déplace de carac en carac jusqu'a rencontrer le caractere null.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut
    Merci pour ta réponse

    Je viens de tester et il semblerait qu'aucune information de type caractère ne passe
    N'étant pas expert en DLL, peut être que j'ai oublié des paramètres élémentaires

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Un exemple serait plus parlant

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    library EncryptLib;
     
    uses
      SysUtils,
      Dialogs,
      Classes;
     
    var
      KeyCode : ShortString;
     
     
    function Trans(Ch1,Ch2: Char;Sens:smallint): Char;
    const Alphanum='-_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var a,b,r, l:integer;
    begin
      l:=Length(Alphanum);
      a:=Pos(Ch1,Alphanum)-1;
      b:=Pos(Ch2,Alphanum)-1;
      r:=(a+b*sens);
      if r<0 then r:=l+r;
      if r>l then r:=r-l;
      Result := Alphanum[r+1];
    end;
     
    function Code(S:ShortString):ShortString;stdcall ;
    var I,J: Integer;
        S2:string;
    begin
      S2:='';
      if (KeyCode<>'') and (S<>'') then
      begin
        J := 1;
        for I:=1 to Length(s) do
        begin
          S2:=S2+Trans(S[i],KeyCode[J],-1);
          J:=(J mod Length(KeyCode)) + 1;
        end;
      end;
      Result:=S2;
    end;
     
    function Decode(S:ShortString):ShortString;stdcall ;
    var I,J: integer;
        S2:string;
    begin
      S2:='';
      if (KeyCode<>'') and (S<>'') then
      begin
        J := 1;
        for I:=1 to length(S) do
        begin
          S2:=S2+Trans(S[i],KeyCode[J],1);
          J:=(J mod Length(KeyCode)) + 1;
        end;
      end;
      Result:=S2;
    end;
     
    procedure SetKeyCode(S:ShortString);stdcall ;
    begin
      KeyCode := S;
    end;
     
    exports SetKeyCode,Code,Decode;
     
    {$R *.res}
     
    begin
    end.
    Voilà une copie de mon code

    Il s'agit d'une DLL qui "code/decode" une chaine de caractère à partir d'un mot clé.
    L'algo m'avait été fourni sur ce même forum

    Vois tu qlq chose de particulier?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Si tu fais comme cela il faut lister l'unité ShareMem.

    Sinon il y a toujours les PChar ou les tableaux de caracteres array[0..N] of char .

Discussions similaires

  1. Partager une Dll
    Par nnj dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/05/2007, 11h29
  2. [TOMCAT] Partager une dll entre 2 webapp
    Par lucho31 dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 18/12/2005, 20h48
  3. Partager une version entre plusieurs DLL
    Par barthelv dans le forum MFC
    Réponses: 4
    Dernier message: 22/11/2005, 10h25
  4. Réponses: 14
    Dernier message: 02/05/2005, 18h14

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