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 :

[Compatibilité] Borland, OPENFILENAME et _WIN32_WINNT


Sujet :

C++Builder

  1. #1
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut [Compatibilité] Borland, OPENFILENAME et _WIN32_WINNT
    J'ai un programme Borland qui marchait très bien, mais qui ne marche plus sous Windows98. En cause, l'instruction GetOpenFileName(&ofn) qui renvoie l'erreur CDERR_STRUCTSIZE. Allons bon, qu'est ce que c'est ce bazar, pourtant je le définis tout à fait normalement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofn.lStructSize = sizeof(OPENFILENAME);
    L'alignement des structures est bon, c'est donc la définition même de cette structure qui a été modifiée. Je vais voir sa description dans commdlg.h:

    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
    typedef struct tagOFNA {
       DWORD        lStructSize;
       HWND         hwndOwner;
       HINSTANCE    hInstance;
       LPCSTR       lpstrFilter;
       LPSTR        lpstrCustomFilter;
       DWORD        nMaxCustFilter;
       DWORD        nFilterIndex;
       LPSTR        lpstrFile;
       DWORD        nMaxFile;
       LPSTR        lpstrFileTitle;
       DWORD        nMaxFileTitle;
       LPCSTR       lpstrInitialDir;
       LPCSTR       lpstrTitle;
       DWORD        Flags;
       WORD         nFileOffset;
       WORD         nFileExtension;
       LPCSTR       lpstrDefExt;
       LPARAM       lCustData;
       LPOFNHOOKPROC lpfnHook;
       LPCSTR       lpTemplateName;
    #ifdef _MAC
       LPEDITMENU   lpEditInfo;
       LPCSTR       lpstrPrompt;
    #endif
    #if (_WIN32_WINNT >= 0x0500)
       void *		pvReserved;
       DWORD        dwReserved;
       DWORD        FlagsEx;
    #endif // (_WIN32_WINNT >= 0x0500)
    } OPENFILENAMEA, *LPOPENFILENAMEA;
    Ah, je commence à comprendre, c'est le flag _WIN32_WINNT qui change la taille de la structure. Mais pourquoi il est à 0x0500 ? Je veux que mes programmes soient compatibles tous systèmes. Il est défini dans windows.h lequel est inclus dans vcl.h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #if defined(__BORLANDC__)
    #    ifndef _WIN32_WINNT
    #        define _WIN32_WINNT 0x0500  /* If not set, assume NT 5.00  */
    #    endif
    Et là, je suis coincé: Si je le force à 0x400 (en le définissant en début de programme, par exemple) j'ai un million d'erreurs dans Windows.hpp, et si je le laisse, Openfilename ne marche plus.

    Question 1: Comment faire ? Je veux dire proprement. Parce que je peux bien sûr faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofn.lStructSize = sizeof(OPENFILENAME) - 12;
    et ça marche, mais je trouve ça très moche, et si cette structure est modifiée, il y en a surement d'autres dans le même cas.

    Question 2: Borland est-il compatible WIN9X ? Si oui, pourquoi ce define _WIN32_WINNT 0x0500 ?

    Ah oui, ceux qui vont me dire "Tu n'a qu'à utiliser le composant TOpenDialog", je les invite dimanche à modifier les centaines d'ouverture de fichiers qu'il y a dans le source.

  2. #2
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Citation Envoyé par 10_GOTO_10
    Question 2: Borland est-il compatible WIN9X ? Si oui, pourquoi ce define _WIN32_WINNT 0x0500 ?
    A voir sur la msdn :
    http://msdn.microsoft.com/library/de...ws_headers.asp

    lanonyme

  3. #3
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    C'est bien ce que j'avais compris. Donc BCB6 n'est pas capable de compiler des programmes compatibles Win98 ou même pour NT4, mais uniquement à partir des versions Win me, Win 2000, Win XP (avec la vcl du moins).

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Il me semble que j'ai deja utilisé BCB 6 sous Win98SE

  5. #5
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    Regarde les remarques en bas de cet article :

    http://chgi.developpez.com/windows/dlgstd/

  6. #6
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Citation Envoyé par 10_GOTO_10
    C'est bien ce que j'avais compris. Donc BCB6 n'est pas capable de compiler des programmes compatibles Win98 ou même pour NT4, mais uniquement à partir des versions Win me, Win 2000, Win XP (avec la vcl du moins).
    J'ai actuellement, BCB 6 sous Win98SE, et il compile

    Et comme la specifier CGi, c'est juste le define qui regle le probleme

    lanonyme

  7. #7
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Citation Envoyé par CGi
    Regarde les remarques en bas de cet article :

    http://chgi.developpez.com/windows/dlgstd/
    Ah ben voilà, c'est très exactement l'erreur que j'ai. Bon, ben je vais faire pareil en espérant qu'il n'y ait pas d'autres structures qui ont changé. Je trouve quand même dommage d'être forcé de faire une compilation conditionnelle et de ne pas pouvoir avoir du code 100% compatible.

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

Discussions similaires

  1. Compatibilité Borland C++ 6 sous Windows Server 2012 64 bits
    Par bachelre dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 11/02/2015, 14h18
  2. Compatibilité objet passé par Borland 4.52 ?
    Par Lawyer666 dans le forum Visual C++
    Réponses: 0
    Dernier message: 30/07/2008, 18h49
  3. Compatibilité TP7 et Borland Pascal pour la fonction SOUND
    Par timetheo dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 08/05/2008, 20h23
  4. Compatibilité entre deux versions de Borland C++ Builder
    Par Takusen dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/06/2007, 11h31
  5. Compatibilité Interbase + Borland
    Par vanoou dans le forum InterBase
    Réponses: 17
    Dernier message: 21/02/2005, 17h07

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