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 :

Delphi Xe3, DLL x64 pour Interbase


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 42
    Points
    42
    Par défaut Delphi Xe3, DLL x64 pour Interbase
    Bonjour,

    Petit problème, je voudrais passer en x64 pour Interbase Serveur mais je dois recompiler la librairie UDF en 64 et j'ai des problèmes les fonctions qui traite avec des pchar... J'ai en retour que le premier caractère ou une erreur:

    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
     
    unit MathFncs;
     
    interface
     
    function TestPChar(var Value: Double): PChar; cdecl; export;
    ...
     
    implementation
     
    uses
      Windows, SysUtils, ibexternals;
     
    function TestPChar(var Value: Double): PChar;
    begin
      result :='Test';
    end;
    ...
    Dans ce cas, j'obtiens 'T', si je mets autre chose soit un message d'erreur ou un 'T'...

    Quelqu'un peut m'aider?

    Merci d'avance!


    Edit :

    Ca progresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TestPChar(var Value: Double): PAnsiString;
    var
       Valeur:AnsiString;
    begin
      Valeur := Format('%8.2m',[Value]);
      result := PAnsiString(Valeur);
    end;
    Avec ceci, j'ai la bonne valeur qui me revient mais de 255 caractères. Apparement le DLL 32 bits fait la même chose!

    Je vais regarder toutes les fonctions que j'utilise et si je vois des erreurs, je reviendrai sur le forum.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    PChar, PAnsiChar, PWideChar

    J'ai en retour que le premier caractère ou une erreur:
    Typique du Zéro de l'octet High du Wide considéré à tord comme un Zéro Terminal Ansi
    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

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par vedge2000;7242614
    Ca progresse :

    [code
    function TestPChar(var Value: Double): PAnsiString;
    var
    Valeur:AnsiString;
    begin
    Valeur := Format('%8.2m',[Value]);
    result := PAnsiString(Valeur);
    end;[/code]

    Avec ceci, j'ai la bonne valeur qui me revient mais de 255 caractères. Apparement le DLL 32 bits fait la même chose!

    Je vais regarder toutes les fonctions que j'utilise et si je vois des erreurs, je reviendrai sur le forum.
    alors tout ceci n'est pas un problème de bit mais d'Unicode manifestement, comme le dit Shai.

    Ceci dit, la fonction TestPChar ci-dessus est horrible ! la variable locale Valeur est détruite en fin de fonction, retourner son adresse n'a pas de sens.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    alors tout ceci n'est pas un problème de bit mais d'Unicode manifestement, comme le dit Shai.

    Ceci dit, la fonction TestPChar ci-dessus est horrible ! la variable locale Valeur est détruite en fin de fonction, retourner son adresse n'a pas de sens.
    Oui entièrement d'accord!

    Pour la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ..
      uses ib_util;
    ..
     
    function AjouterTEST(const p: PAnsiChar): PAnsiChar; cdecl;
    var
    s: string;
    begin
      s := (string(p))+'Test';
      Result := ib_util_malloc(Length(s) + 1);
      StrPCopy(Result, AnsiString(s));
    end;}

    Pour Interbase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DECLARE EXTERNAL FUNCTION CHANGEMYSTRING
    CSTRING(255) CHARACTER SET ISO8859_1
    RETURNS CSTRING(255) CHARACTER SET ISO8859_1 FREE_IT
    ENTRY_POINT 'AjouterTEST' MODULE_NAME 'FreeUDFLib.dll';

Discussions similaires

  1. Programmer directement en assembleur x64 à partir de Delphi XE3
    Par Delphix dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 11/06/2014, 23h45
  2. Seconde mise à jour pour Delphi XE3
    Par Alcatîz dans le forum Delphi
    Réponses: 3
    Dernier message: 27/02/2013, 11h20
  3. Delphi XE3 Archi inclut Interbase XE3 ?
    Par llewsor dans le forum Débuter
    Réponses: 3
    Dernier message: 20/02/2013, 17h51
  4. Réponses: 0
    Dernier message: 13/12/2012, 20h31
  5. [CR XI][Delphi] Quelles DLL CR pour Delphi ?
    Par da_latifa dans le forum SDK
    Réponses: 3
    Dernier message: 19/04/2008, 12h33

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