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++ Discussion :

Pour les acros de Flight Simulator


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut Pour les acros de Flight Simulator
    Bonjour à tous,

    J'ai pu récupérer le code open source pour créer un menu supplémentaire dans FS9. Par contre, j'ai un souci car il compile bien la DLL mais rien n'apparait dans FS. J'ai pourtant pas de message d'erreur. Comme je suis un vrai débutant en C C++, je voulais savoir si l'un d'entre vous pouvait trouver l'erreur. Je pense qu'à la base c'était compiler avec visual C++ 6.
    Actuellement, j'utilise visual C++ express 2005

    main.c
    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
    #include <windows.h>
    #include "module.h"
     
     
    DLLEXPORT MODULE_IMPORT ImportTable = {
       {0x00000000, NULL},
       {0x00000000, NULL}
    };
     
    void FSAPI module_init(void) {}
    void FSAPI module_deinit(void) {}
     
    DLLEXPORT MODULE_LINKAGE Linkage = {
       0x00000000,
       module_init,
       module_deinit,
       0,
       0,
       0x0900,
       NULL
    };
     
    WNDPROC oldWndProc;
     
    HWND hFSimWindow;
     
    #define   MENU_ENTRY   "My Mo&dule"
    #define   ID_MY_MENUITEM   40001
     
     
    LRESULT CALLBACK FSimWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
       switch (uMsg) {
          case WM_NCPAINT:
             {
                HMENU hMenu, hMyMenu;
     
                hMenu = GetMenu(hwnd);
                if (hMenu != NULL) {
                   int i;
                   for (i = 0; i < GetMenuItemCount(hMenu); i++) {
                      char buf[128];
                      GetMenuString(hMenu, i, buf, 128, MF_BYPOSITION);
                      if (strcmp(buf, MENU_ENTRY) == 0) {
     
                         break;
                      }
                   }
                   if (i < GetMenuItemCount(hMenu)) {
     
                      break;
                   }
     
                   hMyMenu = CreateMenu();
                   AppendMenu(hMyMenu, MF_STRING | MF_ENABLED, ID_MY_MENUITEM, "My &First Menu Entry");
     
                   AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hMyMenu, MENU_ENTRY);
                }
             }
             break;
          case WM_COMMAND:
             if (LOWORD(wParam) == ID_MY_MENUITEM) {
                MessageBox(hwnd, "ça marche!", "cool", MB_OK | MB_ICONEXCLAMATION);
                return 0;
             }
             break;
       }
     
       return CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam);
    }
     
     
    BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
       switch (fdwReason) {
          case DLL_PROCESS_ATTACH:
             hFSimWindow = FindWindow("FS98MAIN", NULL);
             oldWndProc = (WNDPROC)SetWindowLong(hFSimWindow, GWL_WNDPROC, (LONG)FSimWindowProc);
             break;
       }
       return TRUE;
    }

    module.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
    #ifndef   __FS_MODULE_H__
    #define   __FS_MODULE_H__
     
    #define   DLLEXPORT   __declspec(dllexport)
    #define   FSAPI   __stdcall
     
     
    typedef struct _MODULE_IMPORT {
       struct {
          int fnID;
          PVOID fnptr;
       } IMPORTSentry;
       struct {
          int fnID;
          PVOID fnptr;
       } nullentry;
    } MODULE_IMPORT;
     
     
    typedef struct _MODULE_LINKAGE {
       int ModuleID;
       void (FSAPI *ModuleInit)(void);
       void (FSAPI *ModuleDeinit)(void);
       UINT32 ModuleFlags;
       UINT32 ModulePriority;
       UINT32 ModuleVersion;
       PVOID ModuleTable;
    } MODULE_LINKAGE;
     
    #endif   /* __FS_MODULE_H__ */
    Par avance merci

    Bye

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu as pu lire quelque part quelles sont les instructions pour rajouter un module?
    Par exemple rajouter la .dll dans un répertoire, etc ... Ceci est mentionné quelque part surement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut
    Citation Envoyé par Alp
    Tu as pu lire quelque part quelles sont les instructions pour rajouter un module?
    Oui, ça je sais faire

    J'ai quand meme quelques erreurs que j'avais zappé.

    \main.c(43) : warning C4133: 'function' : incompatible types - from 'char [128]' to 'LPWSTR'
    1>.\main.c(55) : warning C4133: 'function' : incompatible types - from 'char [21]' to 'LPCWSTR'
    1>.\main.c(57) : warning C4133: 'function' : incompatible types - from 'char [11]' to 'LPCWSTR'
    1>.\main.c(63) : warning C4133: 'function' : incompatible types - from 'char [11]' to 'LPCWSTR'
    1>.\main.c(63) : warning C4133: 'function' : incompatible types - from 'char [5]' to 'LPCWSTR'
    1>.\main.c(77) : warning C4133: 'function' : incompatible types - from 'char [9]' to 'LPCWSTR'
    1>.\main.c(78) : warning C4311: 'type cast' : pointer truncation from 'LRESULT (__stdcall *)(HWND,UINT,WPARAM,LPARAM)' to 'LONG'
    1>.\main.c(78) : warning C4312: 'type cast' : conversion from 'LONG' to 'WNDPROC' of greater size

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Euh...
    C'est méchant, toutes ces erreurs...
    Pour tous les warnings de LPCWSTR, entoure tes chaînes de la macro _T() et utilise des TCHAR au lieu des char (+ les fonctions de <tchar.h> au lieu de celles de <string.h>).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TCHAR buf[128];
    //...
    _T("Chaine entourée de T()")
    //... _tcscmp(buf, _T( "My Mo&dule" ))
    Pour les erreurs avec LONG, c'est dû à une erreur dans les headers de Visual.
    Utilise la fonction SetWindowLongPtr() à la place, et inclus ceci (dans un header de préférence) APRÉS windows.h :
    http://www.developpez.net/forums/sho...90&postcount=2
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sinon, tu as aussi deux méthodes alternatives consistant à casser le thermomètre plutôt que de soigner la maladie :
    • Pour les warnings LPCWSTR, Compiler en multi-byte au lieu d'unicode.
    • Pour les warnings de LONG, désactiver les warnings de portabilité 64 bits.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut
    Citation Envoyé par Médinoc
    Sinon, tu as aussi deux méthodes alternatives consistant à casser le thermomètre plutôt que de soigner la maladie :
    • Pour les warnings LPCWSTR, Compiler en multi-byte au lieu d'unicode.
    • Pour les warnings de LONG, désactiver les warnings de portabilité 64 bits.

    Yes, t'es un champion

    J'ai utilisé la solution dites du thermomètre et ça fonctionne

    Un grand merci à toi

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

Discussions similaires

  1. Rajouter une categorie pour les logiciels de simulation ?
    Par membreComplexe12 dans le forum Evolutions du club
    Réponses: 2
    Dernier message: 20/12/2010, 14h35
  2. Configuration pour flight simulator 10
    Par Louis-Guillaume Morand dans le forum Ordinateurs
    Réponses: 8
    Dernier message: 10/09/2007, 10h16
  3. [WD9] Projet boite noire pour flight simulator
    Par hiriart dans le forum WinDev
    Réponses: 6
    Dernier message: 28/04/2007, 08h48
  4. Add on sur les jeux [flight simulator] et "autres"
    Par Asmod_D dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 08/07/2006, 20h13
  5. [VB]Boite noire pour Flight Simulator
    Par Azkato dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/03/2006, 18h19

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