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

C++Builder Discussion :

VCL et API renvoie des donnees differentes [Système/Fichiers/API]


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut VCL et API renvoie des donnees differentes
    Bonjours
    Je viens de faire une decouverte interressante, a la recherche de la version de Window installee sur mon ordinateur j'ai eu une surprise, suivant que j'utilise la VCL ou l'API j'obtient deux versions de Window differente, je precise que BCB est parametre en mode compatible XP pack2, si je modifie le mode compatible l'API en tiens compte, pas la VCL
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  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
    "Mode Compatible" c'est l'option de l'OS ?
    Je suis encore sous XP, je n'ai que de vague notion en Vista\Seven

    On a déjà parlé dans le forum Delphi de cet étrange phénomène de version

    Quelle API ? GetVersion ? GetVersionEx avec OSVERSIONINFO ? GetVersionEx avec un OSVERSIONINFOEX
    Quel élément de la VCL ? SysUtils.Win32Platform ? SysUtils.Win32MajorVersion ?
    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
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut ShaiLeTroll
    "Mode Compatible" c'est une option de l'OS !
    Pour que ma version BCB6 fonctionne correctement, sur l'icone BCB6 faire un click droit choisir proprietes une fenetre s'ouvre dans l'onglet compatibilite choisir la version Window compatible avec le programme, ainsi que " modifier les parametres pour tous les utilisateurs ",
    Je vais voir ton lien
    Voici le code de teste
    Sur la Form deux TButtons un TMemo
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      Memo1->Clear();
      Memo1->Lines->Add("Major Version:  " +
        String(Win32MajorVersion));
      Memo1->Lines->Add("Minor Version:  " +
        String(Win32MinorVersion));
      int buildNumber = Win32BuildNumber;
      if (Win32Platform == 
            VER_PLATFORM_WIN32_WINDOWS)
        buildNumber = LOWORD(buildNumber);
      Memo1->Lines->Add("Build Number:   " +
        String(buildNumber));
      String platform = "Unknown";
      if (Win32Platform == VER_PLATFORM_WIN32s)
        platform = "Win32s";
      else if (Win32Platform == 
                 VER_PLATFORM_WIN32_WINDOWS)
      {
        if ((Win32MajorVersion > 4) ||
             ((Win32MajorVersion == 4) &&
             (Win32MinorVersion > 0)))
          platform = "Windows 98";
        else
          platform = "windows 95";
      }
      else if (Win32Platform ==
                 VER_PLATFORM_WIN32_NT)
        platform = "Windows NT";
      Memo1->Lines->Add("Platform:       " + platform);
      if (Win32CSDVersion.IsEmpty() && 
            Win32Platform == VER_PLATFORM_WIN32_NT)
        Memo1->Lines->Add("CSDVersion:"
          "     No Service Pack Installed");
      else
        Memo1->Lines->Add("CSDVersion:     " +
          Win32CSDVersion);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      Memo1->Clear();
      OSVERSIONINFO info;
      ZeroMemory(&info, sizeof(OSVERSIONINFO));
      info.dwOSVersionInfoSize = 
        sizeof(OSVERSIONINFO);
      bool success = GetVersionEx(&info);
      if (!success)
      {
        Memo1->Lines->Add("Unable to get OS Version Info");
        return;
      }
      Memo1->Lines->Add("Major Version:  " +
        String(info.dwMajorVersion));
      Memo1->Lines->Add("Minor Version:  " +
        String(info.dwMinorVersion));
      DWORD buildNumber = info.dwBuildNumber;
      if (info.dwPlatformId == 
            VER_PLATFORM_WIN32_WINDOWS)
        buildNumber = LOWORD(buildNumber);
      Memo1->Lines->Add("Build Number:   " +
        String(buildNumber));
      String platform = "Unknown";
      if (info.dwPlatformId == VER_PLATFORM_WIN32s)
         platform = "Win32s";
      else if (info.dwPlatformId == 
                 VER_PLATFORM_WIN32_WINDOWS)
      {
        if ((info.dwMajorVersion > 4) ||
             ((info.dwMajorVersion == 4) &&
             (info.dwMinorVersion > 0)))
          platform = "Windows 98";
        else
          platform = "windows 95";
      }
      else if (info.dwPlatformId ==
                 VER_PLATFORM_WIN32_NT)
        platform = "Windows NT";
      Memo1->Lines->Add("Platform:       " + platform);
      String csdVersion = info.szCSDVersion;
      if (csdVersion.IsEmpty() &&
         info.dwPlatformId == VER_PLATFORM_WIN32_NT)
        csdVersion = "No Service Pack Installed";
      Memo1->Lines->Add("CSDVersion:     " + csdVersion);
    }
    //---------------------------------------------------------------------------
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Comportement encore plus etrange

    Dans BCB en mode teste l'API et la VCL renvoient deux infos differentes comme explique plus haut

    Dans BCB en mode creation .exe l'API et la VCL renvoient tous les deux Window XP

    En executant le .exe l'API et la VCL me renvoi tous les deux Window7
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    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
    Dans BCB en mode teste : c'est le débug ?
    Dans BCB en mode creation : c'est lancer sans débugguer ?

    La VCL utilise un TOSVersionInfo (OSVERSIONINFO) comme ton code
    Regarde TOSVersionInfoEx (OSVERSIONINFOEX)

    Par contre, c'est peut-être le moment de lecture de ces informations
    Cela va créer le processus, cela appelle InitPlatformId durant initialization (startup 32 je crois)
    Mais Windows ne va appliquer la compatibilité qu'une fois le process complètement lancé (après le initialization)
    Je ne vois que cela comme explication !

    Pense que si tu modifie en plus l'environnement BCB, lors du CreateProcess pour lancer ton application, il y a probablement un héritage d'environnement qui diffère semble-t-il selon Debub ou pas en plus

    En executant le .exe l'API et la VCL me renvoi tous les deux Window7
    Ce qui est finalement le plus important ! non ?
    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

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Dans BCB en mode teste : c'est le débug ?

    c'est lancer sans creer le .exe

    Dans BCB en mode creation : c'est lancer sans débugguer ?
    c'est lancer en creent le .exe

    Ce qui est finalement le plus important !
    Oui mais pour debugger cela veut dire qu'il vaut mieux utiliser la VCL

    Pense que si tu modifie en plus l'environnement BCB, lors du CreateProcess pour lancer ton application, il y a probablement un héritage d'environnement qui diffère semble-t-il selon Debub ou pas en plus
    Je pense comme tu le fait remarquer qu'il va y avoir de nouvelles surprises, il sera interressant de voir si les APIs et la VCL donnent aussi des resultats differents, de nouvelles prises de tete en perspectives

    Le lien que tu ma donne en definitif il non pas decele d'ou cela venait, j'ai fait aussi l'essai avec Delphi7, meme punition
    Il serait bon de prevenir nos amis Delphinote de se comportement
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    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
    c'est lancer sans creer le .exe

    Cela va forcément créer le fichier EXE, voir même le MAP et les il* du linkage !
    Je n'ai jamais entendu parler d'un mode de compilation sans passer par un fichier !
    Faut arrêter de fumer la moquette !

    BCB6
    Compiler
    Construire
    Executer (si le fichier n'existe pas, il le compile avant)

    En Delphi7, j'avais observé un comportement différent selon Compiler ou Construire, effectivement, la section initialization d'une unité simplement compilé se retrouvait à la fin de la liste
    Si l'on reconstruisait, l'ordre redevenait celui défini dans le PROJ

    En BCB, j'ignore les différences que cela peut engendrer au RunTime

    En XE2
    Compiler
    Construire
    Exécuter (si le fichier n'existe pas, il le compile avant)
    Exécuter sans Débogage

    A mon avis, c'est parce que tu forces ton IDE en mode compatibilité !
    Avec DXE2, tu n'a pas de genre de problème car compatible Seven\Vista !
    BCB6 a plus de 10 ans, il est normal qu'à un moment donné, cela devienne difficile de l'utiliser même si on préfère cette version au suivante (moi je m'y suis fait quoi, j'ai rétabli la palette et le mode flottant, une fois çà, l'IDE est tout aussi confortable)
    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

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je ne fume pas, alors la moquette

    Dans BCB6 il faut decocher
    Dans l'onglet Lieur, décochez : Utiliser la RTL dynamique
    Dans l'onglet Paquets, décochez : Construire avec les paquets d'exécution

    Si ces deux cases sont cochees on cree un project que l'on peut executer autant de fois que l'on veut sans creer de .exe

    L'investissement dans XE2 est relativement important, et je ne suis pas programmeur
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    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
    Citation Envoyé par blondelle Voir le message
    Utiliser la RTL dynamique ...
    Construire avec les paquets d'exécution ...

    Si ces deux cases sont cochees on cree un project que l'on peut executer autant de fois que l'on veut sans creer de .exe
    Je crois que le sens "créer un .exe" n'est pas le même pour toi que pour moi !
    Pour moi, le fichier .exe est créé peu importe les options !

    Je te garanti que cela construit un EXE même avec ces deux options, certe de 400Ko car il utilise le fichier MTxxxx.dll (pour la RTL) et les BPL (sorte de DLL)
    Je le sais pour le faire aussi puisque je distribue ensuite les BPL et les fichiers comme BrlMM.DLL, MT..DLL

    Sans cela, l'EXE gonfle facilement à plusieurs Méga !
    tu as un EXE quand même dans les deux cas !

    Fait un ShowMessage(Application->ExeName), tu le trouveras le Fichier !
    Par contre, effectivement, le comportement mode Package\RTL Dyn, ça peut être notablement différent !
    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

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci ShaiLeTroll
    j'espere que ce Post sera utile a d'autres, je le marque resolu
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

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

Discussions similaires

  1. [MySQL] inserer des donnees dans deux bases differentes
    Par smile_88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/04/2010, 16h30
  2. Réponses: 3
    Dernier message: 09/07/2009, 10h03
  3. [Mysql] Grouper des données dans 2 tables différentes
    Par jey350 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/11/2006, 11h02
  4. Réponses: 5
    Dernier message: 11/12/2003, 14h45

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