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 :

[D8][Pointeur] Paramètre non protégé / procédure non protogé


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut [D8][Pointeur] Paramètre non protégé / procédure non protogé
    Salut,
    voila j'ai ce type de 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
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    type
      Pinteger = ^integer;
    var
      Machin : PInteger;
      Machin : ^integer;
    begin
     new(Machin);
     Machin^:=1;
     showmessage(IntTostr(Machin^));
     dispose(Machin);
    end;
    Et au momen de l'exécution, j'ai une erreur qui me dit "Les variables pointeur, les paramètres ou les constantes non protégés sont autorisés uniquement dans une procédure non protégée".

    J'ai également essayé ce qui est dit dans l'aide, à savoir ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
                X, Y: Integer;   // X et Y sont des variables Integer
                P: ^Integer;      // P pointe sur un Integer
                begin
                  X := 17;      // affecte une valeur à X
                  P := @X;      // affecte l'adresse de X à P
                  Y := P^;      // déréférence P; affecte le résultat à Y
                end;
    Mais j'ai la même erreur,
    si quelqu'un pouvait m'expliquer comment fonctionn les pointeurs sous delphi8, je lui en serrait très reconnaissant
    Merci d'avance
    byye

    PS : faitespas gaffe a l'utilité du code, ceux sont des tests

  2. #2
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    J'y pense, est-ce que lespointeurs se gèrent encore comme ceci au moins ?
    ou doius-je faire OBLIGATOIREMENT comme dans la FAQ??

    merci

  3. #3
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,
    Oka j'ai trouver coment outre passer ce problème, comme ceci si je ne m'abuse :
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    type
      Pinteger=Class(TObject)
      public
      nb : integer;
      end;
     
    implementation
     
    {$R *.nfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    machin : Pinteger;
    begin
      machin:=Pinteger.create;
      machin.nb:=1;
      showmessage(IntToStr(machin.nb));
      Machin.Free;
    end;
     
    end.
    Mais alors quel intérêt de fair un nouvel objet ?
    pourquoi ne pas utiliser alors plus simplement un nouveaux type via la commande record ?

    ce que je veux dire c'est quelle est la différence entre ce qu'ily a au dessus et ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    rocedure TForm1.Button1Click(Sender: TObject);
    type
      test=record
        chi : integer;
      end;
    var
    sal : test;
    begin
        sal.chi:=2;
      showmessage(IntToStr(sal.chi));
    end;
    Est-ce une questin de mémoire ou autre ??
    Merci d'avance

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Mais alors quel intérêt de fair un nouvel objet ?
    pourquoi ne pas utiliser alors plus simplement un nouveaux type via la commande record ?
    Le problème n'est pas l'utilisation de records mais la gestion "manuelle" de la mémoire (allocation de mémoire via New(), opérateur "@", "^"...). Ces opérations sont maintenant reléguées au framework .NET.

    ce que je veux dire c'est quelle est la différence entre ce qu'ily a au dessus et ça :
    Il y a des tas de différence entre un objet et un record ! Un record ne peut contenir que des champs (et des méthodes sous Delphi .NET), ne supporte pas l'héritage, est transmis par valeur, etc. Un objet est par essence un pointeur sur une instance d'une classe, il faut donc passer par sa construction (Create), sa libération (Free); est transmis par adresse, supporte forcément l'héritage, le polymorphisme...

    Donc si dans ton code ça change pas grand chose (puisque ça marche dans les deux cas), ce choix influera grandement sur la manière d'écrire les algorithmes qui exploiteront tes structures de données.

    Enfin, tu peux écrire du code non-sécurisé en faisant suivre le mot clé unsafe de ta procédure ou de ta fonction qui le contient, si la directive {$UNSAFECODE ON} a été inséré dans ton source. Il y a des tas de désavantage à introduire du code non protégé dans une application .NET, alors autant essayer de modifier dès maintenant tes algorithmes...

    Lectures que je te conseille : Delphi 8 pour .NET, Olivier Dahan, Eyrolles

  5. #5
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,
    OK d'accord merci de m'avoir rpondu,
    une dernière chose s'il te plait et après j'arrete :
    je ne fait pas d'application .NET, me conseilles-tu de revenir sous Delphi 7 ou de rester sous Delphi 8 ?
    Enfin pour une applicaiton .NET l'utilisation de unsafe est-elle également déconseillé ?

    Merci encore et à bientot
    ++

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    salut,
    heuuuuuu tu fait quoi sous D8 du Win128 .
    a+
    fusef

  7. #7
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Pointeur = A oublier sous Delphi 8 ( comme pour tout langage managé ).

    Le Unsafe ne doit être utilisé qu'en dernier recours.

    On peut facilement remplacer des pointeurs d'enregistrement par des classes simples, voir :

    http://nono40.developpez.com/tutorie...dotnet/record/

  8. #8
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,
    Citation Envoyé par fusef
    salut,
    heuuuuuu tu fait quoi sous D8 du Win128 .
    a+
    fusef
    justement tel est le but de ma question, j'ai pris delphi 8 version évaluation afin de le tester, et justement je suis en train de m'apercevoir qu'aparement, étant donné que je ne fais ni plus ni moins que des applications classiques, la version 8 m'a l'air inutile

    Vrai ou faux ?
    merci

  9. #9
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Lut,
    Citation Envoyé par Nono40
    On peut facilement remplacer des pointeurs d'enregistrement par des classes simples, voir :

    http://nono40.developpez.com/tutorie...dotnet/record/
    Oui j'ai déjà lu ceci, effectivement on peut facilement les remplacer,
    mais quel serais le bon choix pour moi : revenir sous delphi 7 et utiliser les pointeurs comme toujours ou à la rigueur ne plus me servir des pointeur mais de nouveaux objets,
    ou rester sous delphi 8 et m'adapter par conséquence

    ??

    merci à toi

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Bleys
    Salut,

    justement tel est le but de ma question, j'ai pris delphi 8 version évaluation afin de le tester, et justement je suis en train de m'apercevoir qu'aparement, étant donné que je ne fais ni plus ni moins que des applications classiques, la version 8 m'a l'air inutile

    Vrai ou faux ?
    merci
    Salut,
    Non delphi8 n’est pas inutile si tu achète la version 8 tu as avec la version 7 donc
    Tu peux faire du .NET et Du Win32
    A+
    fusef

  11. #11
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,
    Citation Envoyé par fusef
    Citation Envoyé par Bleys
    Salut,

    justement tel est le but de ma question, j'ai pris delphi 8 version évaluation afin de le tester, et justement je suis en train de m'apercevoir qu'aparement, étant donné que je ne fais ni plus ni moins que des applications classiques, la version 8 m'a l'air inutile

    Vrai ou faux ?
    merci
    Salut,
    Non delphi8 n’est pas inutile si tu achète la version 8 tu as avec la version 7 donc
    Tu peux faire du .NET et Du Win32
    A+
    fusef
    Ok d'accord merci, alors je vais continuer de me servir de la version dévaluation fourni par borland sur leur site afin de m'y habituer, et une fois le délai dépassé, je verrais pour ce qui en est de l'achat
    merci a vous
    ++

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

Discussions similaires

  1. [VBA-E] Sauvegarder une copie non protégée lors de la sauvegarde
    Par thomasvst dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/03/2007, 14h01
  2. message d'erreur 'type non protégé 'Pchar'
    Par neho88 dans le forum Delphi
    Réponses: 3
    Dernier message: 15/03/2007, 00h18
  3. Réponses: 4
    Dernier message: 02/03/2006, 16h43
  4. [ORA-06576]procédures non reconnues
    Par critok dans le forum Oracle
    Réponses: 12
    Dernier message: 21/12/2005, 13h56
  5. Réponses: 1
    Dernier message: 19/08/2005, 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