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 :

[D2009] Dll Dynamique (StdCall) Pb String PWideChar


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut [D2009] Dll Dynamique (StdCall) Pb String PWideChar
    Bonjour tout le monde,

    Je tente de passer d'un DLL Statique à un DLL dynamique.

    Voici une partie de a Dll

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure ExportCD(Table,BaseLocal,Chemin_Destination,Nom_Destination: PWideChar);StdCall;
    begin
    showmessage('1 = '+Chemin_Destination+Nom_Destination);
    showmessage('2 = '+PChar(Chemin_Destination)+PChar(Nom_Destination));
    Showmessage('3 = '+String(Chemin_Destination)+String(Nom_Destination));
    Showmessage('4 = '+WideString(Chemin_Destination)+WideString(Nom_Destination));
    Showmessage('5 = '+WideCharToString(Chemin_Destination)+WideCharToString(Nom_Destination));
      xStr := StrPas(Chemin_Destination)+StrPas(Nom_Destination);
    Showmessage('6 = '+xStr);
     
    //...
    end;

    Voilà comment je l'utilise :

    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
     
     
    Procedure ....
    Var
    //...
     
    //
    // DLL Dynamique
    //
    Type
      TDllExportCD = procedure(Table,BaseLocal,Chemin_Destination,Nom_Destination: PWideChar);
    Var
      DllInstance : THandle;
      ExportCD :TDllExportCD;
      TempNameDll : PChar;
    begin
     
    // Pour info
    // XTable est de type String
    // Chemin_et_Base est de type string
    // RepertoireOut est de type string
    // FileNameExport est de type string
     
            try
              //essaye de charger la dll
              TempNameDll := PChar('ecd0100.dll');
              DllInstance := Loadlibrary(TempNameDll);
              if DllInstance <> 0 then begin
                 //obtient l'addresse
                 @ExportCD := getprocaddress(DllInstance,'ExportCD');
                 if Assigned(ExportCD) then
                 begin
                 //appel de la fonction de la dll
                    ExportFileCD
                   (
                    PWideChar(xTable),  
                    PWideChar(Chemin_et_Base),
                    PWideChar(IncludeTrailingPathDelimiter(RepertoireOut)),
                    PWideChar(FileNameExport)
                    );
                 end
                 else
                    showmessage('Procédure inexistante');
              end
              else
                 showmessage('Impossible de charger la dll d''export CD.');
            finally
              //libère
              freelibrary(DllInstance);
              DllInstance := 0;
            end;
    //...
    Mon probleme c'est aucun de mes showmessages de ma dlls me retourne des infos lisible, j'ai des hiéroglyphes à la place, je n'arrive pas à transmettre les infos correctement.
    Je me suis effforcé d'utilisé des PWideChar, sinon je dois fournir une DLL en plus pour l'install, donc en voulant faire bien, je but sur ce problème.


    MErci de votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 831
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Il te manque déjà StdCall dans la déclaration de TDllExportCD coté exe.

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Il te manque déjà StdCall dans la déclaration de TDllExportCD coté exe.
    Salut andnotor, effectivement j'ai pu le voir et même avec cela ne fonctionnais pas.

    J'ai lu cela il y a quelque minutes :
    http://www.developpez.net/forums/d74...ing-pchar-dll/

    Ce qui m'a aidé et corrigé mon problème.

    Mais j'en est un autre : Impossible de liberé ma library, j'ai systématiquement une erreur (genre d'erreur incrompréhensible).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Try
     
    //
     
    Finally
      freelibrary(DllInstance); // <== Erreur
    End;
    Si je ne fais pas de free cela fonctionne parfaitement.
    Si je laisse le free et que je vide ma procédure (elle fait rien) alors ca fonctionne.

    Alors je sais pas si cela vients du FreeLibrary ou si dans ma procédure de ma Dll j'ai oublié quelquechose.

    Voici Ma Dll en entière :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    library ecd0100;
     
    { 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,
      Windows,
      Dialogs,
      ADODB,
      StrUtils,
    //  Commun,
      sGauge,
      DateUtils;
     
    Type
      TFileCDDebEcriture = Record
        Code      : Array[0..0] of AnsiChar; // typiquement 1
        JL        : Array[0..1] of Ansichar; // 99
        SautLigne : Array[0..1] of AnsiChar;
    end;
     
    Type
      TFileCDLigneEcriture = Record
        INT_TYP     : array[0..0]  of AnsiChar; // 1 (alphanumérique)
        INT_JL      : array[0..1]  of AnsiChar; // 2
        INT_DAT     : array[0..5]  of AnsiChar; // 6
        INT_PIE     : array[0..4]  of AnsiChar; // 5
        INT_LIB     : array[0..31] of AnsiChar; // 32
        INT_CLASSE  : array[0..0]  of AnsiChar; // 1
        INT_CPT     : array[0..11] of AnsiChar; // 12
        INT_DC      : array[0..0]  of AnsiChar; // 1
        INT_MT      : array[0..11] of AnsiChar; // 12
        INT_ECH     : array[0..5]  of AnsiChar; //  6
        INT_REG     : array[0..1]  of AnsiChar; //  2
        INT_LET     : array[0..0]  of AnsiChar; //  1
        INT_ANO     : array[0..0]  of AnsiChar; //  1
        INT_ANC     : array[0..11] of AnsiChar; // 12
        INT_INT     : array[0..29] of AnsiChar; // 30
        INT_JAL     : array[0..3]  of AnsiChar; //  4
        INT_TJL     : array[0..0]  of AnsiChar; //  1
        INT_EIC     : array[0..9]  of AnsiChar; // 10
        INT_NLET    : array[0..1]  of AnsiChar; //  2
        INT_TRANS   : array[0..0]  of AnsiChar; //  1
        INT_DIV     : array[0..11] of AnsiChar; // 12
        INT_DEVISE  : array[0..0]  of AnsiChar; //  1
        INT_ANCIEN  : array[0..3]  of AnsiChar; //  4
        INT_RAPDOR  : array[0..5]  of AnsiChar; //  6
        INT_LP1     : array[0..0]  of AnsiChar; //  1
        INT_EICCCP  : array[0..5]  of AnsiChar; //  6
        INT_PIE2    : array[0..7]  of AnsiChar; //  8
        INT_ANA1    : array[0..4]  of AnsiChar; //  5
        INT_ANA2    : array[0..4]  of AnsiChar; //  5
        INT_ANA3    : array[0..4]  of AnsiChar; //  5
        INT_LIBANA  : array[0..63] of AnsiChar; // 64
        INT_REF     : array[0..15] of AnsiChar; // 16
        INT_TVA     : array[0..15] of AnsiChar; // 16
        INT_CPT_TRF : array[0..12] of AnsiChar; // 13
        INT_REF32   : array[0..31] of AnsiChar; // 32
        INT_DAAID   : array[0..9]  of AnsiChar; // 10
        INT_RESAZ   : array[0..31] of AnsiChar; // 32
        INT_EXT     : array[0..0]  of AnsiChar; //  1
        INT_QTE     : array[0..11] of AnsiChar; // 12
        INT_QTU     : array[0..0]  of AnsiChar; //  1
        INT_ECR_GE  : array[0..31] of AnsiChar; // 32
        INT_LE_GED  : array[0..31] of AnsiChar; // 32
        FinLigne    : Array[0..1] of AnsiChar;
    end;
     
    Type
      TFileCDFinEcriture = Record
        Code      : Array[0..0] of AnsiChar; // Typiquement 3
        SautLigne : Array[0..1] of AnsiChar;
    end;
     
    procedure ExportFileCD(Table,BaseLocal,Chemin_Destination,Nom_Destination: PChar;Gauge: TsGauge);StdCall;
    Var
      DebEcr  : TFileCDDebEcriture;
      LigEcr  : TFileCDLigneEcriture;
      FinEcr  : TFileCDFinEcriture;
      FStream : TStream;
      LChaine : Integer;
     
      Cnx        : TADOConnection;
      Tbl        : TADOTable;
     
      OldHidePiece : Integer;
     
      xClasse: String;
      xCompte: String;
      xStr   : String;
      i: Integer;
      AdddebCre: Integer;
     
    begin
      xStr := WideCharToString(Chemin_Destination)+WideCharToString(Nom_Destination);
      FStream := TFileStream.Create(xStr,fmCreate);
      Try
        Cnx := TADOConnection.Create(nil);
        try
          With Cnx Do
          begin
            Provider := 'Microsoft.Jet.OLEDB.4.0';
            ConnectionString :='Data Source='+Baselocal+';Persist Security Info=False';
            LoginPrompt := False;
            Mode := cmRead;
          end;
          Tbl := TADOTable.Create(nil);
          try
            Tbl.Connection := Cnx;
            Tbl.TableName  := Table;
            Tbl.Open;
            Tbl.Sort := 'Journal, HidePiece';
            Gauge.Progress := 0;
            Gauge.MaxValue := Tbl.Recordset.RecordCount-1;
            Gauge.Suffix   := '% Création du fichier CD';
            While Not Tbl.Eof do
            begin
              DebEcr.Code       := '1';
              DebEcr.JL         := '99';
              DebEcr.SautLigne  := #13+#10;
              FStream.Write(DebEcr,Sizeof(TFileCDDebEcriture));
     
              OldHidePiece := Tbl.FieldByName('HidePiece').AsInteger;
     
              While (OldHidePiece = Tbl.FieldByName('HidePiece').AsInteger)
                And (Not Tbl.eof) do
              begin
                LigEcr.INT_TYP    := '2';
                LigEcr.INT_JL     := '00'; // Non utilisé
                StrPCopy(LigEcr.INT_DAT,FormatdateTime('yymmdd',Tbl.FieldByName('DateEcriture').AsDateTime));
     
                xStr := Tbl.FieldByName('LibelleEcriture').AsString;
                xStr := xStr + StringOfChar(' ',Length(LigEcr.INT_LIB) - Length(xStr));
                StrPCopy(LigEcr.INT_LIB,xStr);
     
                xClasse := LeftStr(Tbl.FieldByName('Compte').AsString,1);
                xCompte := '';
                case IndexStr(xClasse,['C','F','X']) of
                  0..1:
                  begin
                    StrPCopy(LigEcr.INT_CLASSE,xClasse);
                    xCompte := MidStr(Tbl.FieldByName('Compte').AsString,Length(xClasse)+1,Length(Tbl.FieldByName('Compte').AsString)-Length(xClasse));
                  end;
                  else
                  begin
                    LigEcr.INT_CLASSE := 'G';
                    xCompte := Tbl.FieldByName('Compte').AsString;
                  end;
                end;
                xCompte := xCompte + StringOfChar(' ',Length(LigEcr.INT_CPT) - Length(xCompte));
                StrPCopy(LigEcr.INT_CPT,xCompte);
                if Tbl.FieldByName('SigneEcriture').AsString = '+'
                then AdddebCre := 0
                else AdddebCre := 2;
                case IndexStr(Tbl.FieldByName('SensEcriture').AsString,['D','C'])+AdddebCre of
                  0: LigEcr.INT_DC := '0';// Débit Positif
                  1: LigEcr.INT_DC := '1';// Crédit Positif
                  2: LigEcr.INT_DC := '2';// Débit Négatif
                  3: LigEcr.INT_DC := '3';// Crédit Négatif
                end;
                xStr := FormatCurr('0.00',Tbl.FieldByName('MontantEcriture').AsCurrency);
                xStr := StringReplace(xStr,',','',[]);
                xStr := StringReplace(xStr,'.','',[]);
                xStr := StringOfChar('0',Length(LigEcr.INT_MT) - Length(xStr))+xStr;
                StrPCopy(LigEcr.INT_MT,xStr); // 12
     
                LigEcr.INT_ECH    := '';  //  6
                LigEcr.INT_REG    := 'R'; //  2 - Non utilisé
                LigEcr.INT_LET    := '';  //  1 - Non utilisé
                LigEcr.INT_ANO    := '0'; //  1
                LigEcr.INT_ANC    := '';  // 12
                xStr := Tbl.FieldByName('LibelleCompte').AsString;
                xStr := xStr + StringOfChar(' ',Length(LigEcr.INT_INT) - Length(xStr));
                StrPCopy(LigEcr.INT_INT,xStr);
                xStr := Tbl.FieldByName('Journal').AsString;
                xStr := xStr + StringOfChar(' ',Length(LigEcr.INT_JAL) - Length(xStr));
                StrPCopy(LigEcr.INT_JAL,xStr); //  4
                case Tbl.FieldByName('TypeJournal').AsInteger of
                  0: LigEcr.INT_TJL  := '1'; // Achat
                  1: LigEcr.INT_TJL  := '2'; // Vente
                  2: LigEcr.INT_TJL  := '3'; // Trésorerie
                  3: LigEcr.INT_TJL  := '3'; // Caisse
                  4: LigEcr.INT_TJL  := '4'; // Opération Diverse
                  5: LigEcr.INT_TJL  := '0'; // A nouveaux
                  7: LigEcr.INT_TJL  := '5'; // Inventaire
                  Else // Dans ce cas OD
                    LigEcr.INT_TJL  := '4'; //  1
                end;
                LigEcr.INT_EIC    := ''; // 10 - Non utilisé
                LigEcr.INT_NLET   := ''; //  2
                LigEcr.INT_TRANS  := ''; //  1 - Non utilisé
                LigEcr.INT_DIV    := ''; // 12
                xStr := LeftStr(Tbl.FieldByName('DeviseEcriture').AsString,1);
                StrPCopy(LigEcr.INT_DEVISE,xStr);  //  1
                LigEcr.INT_ANCIEN := ''; //  4
                LigEcr.INT_RAPDOR := '000000'; //  6 (Format AAAAMM)
                LigEcr.INT_LP1    := ''; //  1
                LigEcr.INT_EICCCP := ''; //  6 - Non utilisé
                xStr := Tbl.FieldByName('NumPiece').AsString;
                xStr := xStr + StringOfChar(' ',Length(LigEcr.INT_PIE2) - Length(xStr));
                StrPCopy(LigEcr.INT_PIE2,xStr);
                LigEcr.INT_ANA1   := ''; //  5
                LigEcr.INT_ANA2   := ''; //  5
                LigEcr.INT_ANA3   := ''; //  5
                LigEcr.INT_LIBANA := ''; // 64
                LigEcr.INT_REF    := ''; // 16 - Réservé
                LigEcr.INT_TVA    := ''; // 16
                LigEcr.INT_CPT_TRF:= ''; // 13
                LigEcr.INT_REF32  := ''; // 32 - Réservé
                LigEcr.INT_DAAID  := ''; // 10 - Non utilisé
                LigEcr.INT_RESAZ  := ''; // 32 - Réservé
                LigEcr.INT_EXT    := 'N'; //  1
                LigEcr.INT_QTE    := '000000000000'; // 12
                LigEcr.INT_QTU    := ''; //  1
                LigEcr.INT_ECR_GE := ''; // 32
                LigEcr.INT_LE_GED := ''; // 32
                LigEcr.FinLigne  :=#13+#10;
                FStream.Write(LigEcr,Sizeof(TFileCDLigneEcriture));
     
                Gauge.Progress := Gauge.Progress + 1;
                Tbl.Next;
              end; // End While
     
              if (Not(Tbl.Eof))
              then tbl.Prior
              else Gauge.Progress := Gauge.Progress + 1;
     
              FinEcr.Code       := '3';
              FinEcr.SautLigne  := #13+#10;
              FStream.Write(FinEcr,Sizeof(TFileCDFinEcriture));
     
              Tbl.Next;
            end;
          finally
           Tbl.Close;
           Tbl.Free;
          end;
        finally
          Cnx.Close;
          Cnx.Free;
        end;
      Finally
        FStream.Free;
      End;
    end;
     
    {$R *.res}
     
    Exports
      ExportFileCD;
     
    begin
     
    end.
    Et donc dés que je free la library j'ai une violation d'accès, où si je vide ma procédure de ma Dll le free de ma library fonctionne.

    quand pensez-vous ?


    PS : en mode statique cela fonctionne parfaitement. Juste que en Statisque je n'utilisais pas le StdCall mais le Registrer

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    RE

    Donc maintenant je sais d'où il me sort une violation d'accès.

    C'est dû à ma gauge, si je mets en commentaire toutes les lignes où ce trouve ma Gauge je n'ai plus aucun problème !!!

    C'est problématique, en fait cette gauge est dans ma form appelant la Dlls donc je lui envoi comme ceci :

    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
            try
              // Essaye de charger la dll
              TempNameDll := PChar('ecd0100.dll');
              DllInstance := Loadlibrary(TempNameDll);
              if DllInstance <> 0 then begin
                 //obtient l'addresse
                 @ExportFileCD := getprocaddress(DllInstance,'ExportFileCD');
                 if Assigned(ExportFileCD) then
                 begin
                 // Appel de la fonction de la dll
                    ExportFileCD(
                    PChar(xTable),
                    PChar(Chemin_et_Base),
                    PChar(IncludeTrailingPathDelimiter(RepertoireOut)),
                    PChar(FileNameExport),
                    sGauge2); // <== C'est cette gauge
                 end
                 else
                    showmessage('Procédure inexistante');
              end
              else
                 showmessage('Impossible de charger la dll d''export CD.');
            finally
              //libère
              freelibrary(DllInstance); 
            end;
    Peut-être le fait que en Libérant ma Dll il perd ces petit avec la gauge de la form ?

    Connaissez-vous ce phénomène ? et comment y remédier ?
    Car sans une gauge on ne connais pas clairement l'évolution du traitement.

    Merci.

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 681
    Points : 7 112
    Points
    7 112
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Connaissez-vous ce phénomène ?
    J'ai le même problème de libération. Mais je ne passe pas de gauge.
    Ca m'intéresse de comprendre ce qui se passe, parce qu'en attendant je ne fais plus le FreeLibrary.

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Lung Voir le message
    J'ai le même problème de libération. Mais je ne passe pas de gauge....FreeLibrary.
    Surement un autre composant qui proviens de la form appelant la dlls.

    Je viens d'essayer en passant part une création dynamique d'une gauge temporaire avant l'appel de la Dlls, mais j'ai pour l'instant toujours le même problème.

    Je cherche encore...

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Ok,

    Je viens de trouver exactement d'où cela viens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gauge.Suffix   := '% Création du fichier CD';
    Ma gauge fonctionne si je touche pas a cela de ma Dll.

    Et je pense que c'est normal, car on doit parler en PChar et la je suis en String.

    Je vais voir comment y remédier.


    @+

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bon J'ai résolu mon problème en mettant cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //...
                    sGauge2.Suffix   := '% Création du fichier CD';
    //...
    avant l'appel de ma DLL (dans mon cas cela me suffit).

    J'ai evidement tenter cela dans la Dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sGauge2.Suffix   := PChar('% Création du fichier CD');
    sans succès

    @Lung:
    Peut-être que toi tu rensigne un label ou un edit depuis ta dlls vers ton exe et que tu utilise un String.

    Bye

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

Discussions similaires

  1. [D2009][dll] probleme string widechar etc..
    Par hepha1970 dans le forum Débuter
    Réponses: 3
    Dernier message: 21/03/2009, 21h36
  2. Configurer dynamiquement la connection string
    Par dysko dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/04/2007, 17h09
  3. Charge une DLL dynamiquement
    Par K.othmane dans le forum Delphi
    Réponses: 8
    Dernier message: 30/07/2006, 23h48
  4. cree un dll dynamique
    Par totorien dans le forum MFC
    Réponses: 1
    Dernier message: 15/06/2005, 15h09
  5. Réponses: 8
    Dernier message: 22/12/2004, 23h57

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