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 :

Écrire le contenu d'un record contenant 1 array dynamique en ressource?


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Écrire le contenu d'un record contenant 1 array dynamique en ressource?
    Bonjour tout le monde,

    j'ai un "record" contenant un tableau de char, je souhaite écrire le contenu du record dans les ressources d'un autre fichier, cela marche très bien quand le tableau de char est statique, dès que je le passe en dynamique, le contenu est mal écrit (peu importe la taille du tableau dynamique, la taille de la ressource est toujours de 4 bytes)

    voila mon code:

    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
    type
      TInfo = record
        test: array of Char;
      end;
     
    var
      Form1: TForm1;
      Info: TInfo;
     
    implementation
     
    {$R *.dfm}
     
    Procedure WriteResData(ServerFile: String; Buffer: Pointer; Size: Integer; ResourceName: String);
    Var
      ResourceHandle        :THandle;
      WideServerFile        :PWideChar;
      WideResourceName      :PWideChar;
    Begin
      GetMem(WideServerFile,   (Length(ServerFile)   + 1) * 2);
      GetMem(WideResourceName, (Length(ResourceName) + 1) * 2);
     
      Try
        StringToWideChar(ServerFile,   WideServerFile,   Length(ServerFile)   * 2);
        StringToWideChar(ResourceName, WideResourceName, Length(ResourceName) * 2);
     
        ResourceHandle := BeginUpdateResourceW(WideServerFile, False);
        UpdateResourceW(ResourceHandle, MakeIntResourceW(10), WideResourceName, 0, Buffer, Size);
        EndUpdateResourceW(ResourceHandle, False);
      Except
        FreeMem(WideServerFile);
        FreeMem(WideResourceName);
      End;
     
    End;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
     
      SetLength(Info.test, 5);
     
      for i := 0 to 4 do
      begin
     
        Info.test[i] := 'a';
     
      end;
     
      WriteResData('C:\Calc.exe', @Info, SizeOf(Info), 'NomRessource');
     
    end;
    en changant "test: array of Char;" en "test: array[0..4] of Char;"
    et en supprimant le setlength, ça marche (en statique donc)

    je demande votre aide parce je vois pas trop où est le problème, j'ai déjà utiliser des tableaux dynamiques dans un autre contexte, et j'ai eu aucun problème.

    Merci beaucoup à l'avance,

    salutation

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2009, 16h49
  2. recuperer contenu sur des url contenant des variables.
    Par joboy84 dans le forum Langage
    Réponses: 11
    Dernier message: 08/07/2008, 08h02
  3. Duplication de record contenant des objets
    Par bleuerouge dans le forum Débuter
    Réponses: 1
    Dernier message: 03/06/2008, 18h45
  4. Réponses: 18
    Dernier message: 13/06/2007, 12h08
  5. Réponses: 3
    Dernier message: 06/02/2006, 17h04

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