Skip to content
View in the app

A better way to browse. Learn more.

The AVSIM Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Looking for Module DLL Programming Info

Featured Replies

Hello there, I'm trying to find info on how to program a plug-in for the MSFS that drops in the Modules folder and show up in the pulldown menus.I looked through the SDK and didn't find information abut this. Can anyone point me to any information ? (like web site, forum, sourse ...)Thanks !Alex.

I am interested also. Isn't it the same as gauge programming, only named as dll instead of gau and put it into the modules folder? (well, of course without gauge definitions)Gabor

Alex,I think I was right in my previous reply. I searched through the forum and I found Arne Bartels' reply somewhere. Arne I hope you do not bother if I copy it here. It shows, that it is same as in case of gauge programming...--- from Arne's mail --------------My inner core of FS9 modules looks likes this, ...void FSAPI ModuleInit(void){...}void FSAPI ModuleDeinit(void){...}//---------------------------------------------------------BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOIDlpReserved) { ... } /* This is the module's import table. */ GAUGESIMPORT ImportTable = { { 0x0000000F, (PPANELS)NULL }, { 0x00000000, NULL }}; /* This is the module's export table. */ GAUGESLINKAGE Linkage = { 0x00000001, ModuleInit, ModuleDeinit, 0, 0, FS9LINK_VERSION, NULL};If I recall that right you need 0x00000001 for full access toall functions of the PANELS structure (ImportTable), othernumbers like 0x00000000 limit the functionality and all..._register_c_callback functions are part of the"higher" ImportTable functions. Also ImportTable has to be properly set up with bothentries, to get ImportTable at all which you need for callingany function out of it (most FS functions that are not part ofthe image structure itself, are macros extending theImportTable members).Arne Bartels-----------------------------------

And if I am correct with the above assumptions, then is it OK to use the init function as follows (like in gauges)?void FSAPI module_init(void){ chain_insert2(CHAIN_18HZ_SYNC, System_18Hz, NULL, 0); chain_insert2(CHAIN_1HZ_SYNC, System_1Hz, NULL, 0); register_key_event_handler( (GAUGE_KEY_EVENT_HANDLER)KeyHandler, NULL);}Where the first two comands define my callbacks to be called by FS every 1/18th and 1 secons respectively. The third defines my callback function to be called by FS with any events. The callbacks are defined as follows:void FSAPI System_1Hz(DWORD event_id,VOID *buffer_specific,PVOID user_buffer,DWORD user_param){...}void FSAPI System_18Hz(DWORD event_id,VOID *buffer_specific,PVOID user_buffer,DWORD user_param){...}void FSAPI KeyHandler(ID32 event, UINT32 evdata, PVOID userdata){ switch(event) { case KEY_DEC_COWL_FLAPS: ... break; case KEY_INC_COWL_FLAPS: ... break; ... }}

  • 4 weeks later...
  • Author

Hi again.Could you please say, where I can get definition of this fuction:>chain_insert2(CHAIN_18HZ_SYNC, System_18Hz, NULL, 0);>chain_insert2(CHAIN_1HZ_SYNC, System_1Hz, NULL, 0);>register_key_event_handler( (GAUGE_KEY_EVENT_HANDLER)KeyHandler, NULL);Where I compile project, I get this message:----------------------------------------------.module.cpp(16) : error C2065: 'CHAIN_18HZ_SYNC' : undeclared identifier.module.cpp(16) : error C2065: 'System_18Hz' : undeclared identifier.module.cpp(16) : error C3861: 'chain_insert2': identifier not found.module.cpp(17) : error C2065: 'CHAIN_1HZ_SYNC' : undeclared identifier.module.cpp(17) : error C2065: 'System_1Hz' : undeclared identifier.module.cpp(17) : error C3861: 'chain_insert2': identifier not found.module.cpp(18) : error C2065: 'KeyHandler' : undeclared identifier----------------------------------------------In Gauge.h I didn't find declaretion of this fuction.Sorry for my English. :)Thanks.Alex.

Hi,I send you my "extended" fs9gauges.h file and a small sample if you give me your email address. I developed some codes using this technique. Now I develop a more complex one and I decided that I do not want to rely on these kind of "hacked" access, as I would like to be compatible with FSX also. So I interface FS via FSUIPC (unregistered or registered - depending on whether you would like to read only, or write as well). With this technique I can easily compile my code in two versions: FS Module and Windows EXE - only the main routine should be different. You will see my main code fragment below. Somewhere in the initialization code I start a timer so I will have a routine running every - let's say - 1/10th seconds independent of FS:// Initializes 10Hz timerTimerID = SetTimer( NULL, 0, 100, System_10Hz );... where the 4th param is my timer routine:VOID CALLBACK System_10Hz( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime )End now let's see the main code. Here you can not see the FSUIPC initialisation and usage, that is a well-documented thing elswhere. This is just a DLL that is used as a module. Very simple and works fine.//--- Global vars -------------------------------------------HINSTANCE hInstance = NULL;TCHAR sModulePath[MAX_PATH] = {0};//-----------------------------------------------------------// FS will call this routine on module initializationvoid __stdcall module_init(void){ Init( sModulePath ); // my init function...}//-----------------------------------------------------------// FS will call this routine on module shut downvoid __stdcall module_deinit(void){ ShutDown(); // my shutdown function...}//---------------------------------------------------------------// The DllMain function is an optional entry point into a // dynamic-link library (DLL). It is called by the system // when processes and threads are initialized and // terminated, or upon calls to the LoadLibrary and // FreeLibrary functions. See more:// http://msdn.microsoft.com/library/default....ase/dllmain.aspBOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved){ hInstance = hDLL; switch( dwReason ) { case DLL_PROCESS_ATTACH: // Retrieves gauge directory. GetModuleFileName( (HMODULE)hInstance, sModulePath, MAX_PATH ); sModulePath[strrchr((char *)sModulePath,'') - (char *)sModulePath + 1] = '0'; break; case DLL_PROCESS_DETACH: break; default: break; } return TRUE;}//-------------------------------------------------------------// This is the module's export table.typedef struct MODULELINKAGE{ int ModuleID; void (__stdcall *ModuleInit)(void); void (__stdcall *ModuleDeinit)(void); unsigned int ModuleFlags; unsigned int ModulePriority; unsigned int ModuleVersion; void *GaugeHdrs;} MODULELINKAGE;;EXTERN_C __declspec(dllexport) MODULELINKAGE Linkage ={ 0x00000000, module_init, module_deinit, 0, 0, 0x0900, NULL};

  • 2 weeks later...

Hi,I received some requests, so I considered it better to summarize what I experienced in a separate web page:http://www.hrasko.com/gabor/fs/moduleprog/...le_example.htmlI should tell you that I am not a very experienced module programmer, but I hope this will help someone.Gabor

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.