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
    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

  2. #2
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    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 : 14 089
    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
    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);
    }
    //---------------------------------------------------------------------------

  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
    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

  5. #5
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    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 : 14 089
    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
    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

  7. #7
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    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 : 14 089
    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
    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

  9. #9
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    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 : 14 089
    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
    Par d�faut
    Merci ShaiLeTroll
    j'espere que ce Post sera utile a d'autres, je le marque resolu

+ 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