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