bfalcao
-
Posts
12 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Gallery
Downloads
Posts posted by bfalcao
-
-
Hi,
First of all thank you for you help.
Pete the code was not 100% that one. It's injected on a C++ project so you might see some things that only appear on this project.
Beatle, unfortunately it didnt work.
Also, I made a debug and I saw that the FS enters inside the "DLLMain" but somehow it just does that. It doesnt call the FSimWindowProc function.
About the Native C++ code and not managed, this is the command arguments that Visual C++ is generating:
/Od /GL /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "TESTE27_EXPORTS" /D "_WINDLL" /FD /EHsc /MTd /GS /Yu"stdafx.h" /Fp"Debug/teste27.pch" /Fo"Debug/" /Fd"Debug/vc70.pdb" /FR"Debug/" /W3 /nologo /c /Wp64 /Zi /TP
Also, the option "Use Managed Extensions" is "OFF". Is this correct ?
(Thank you)
-
Hi,
I dismissed the C# for now and I am trying to create the module using C++.
The problem is that when I do a C project, everything runs fine. But when I try to change it to C++ project, the DLL compiles, but in the flight simulator is doesnt show the menu bar any more :( ..
I am using the normal example that everybody knows :) :
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include
#include "module.h"
DllClass::DllClass()
{
}
DllClass::~DllClass ()
{
}
/*
* We define just basic interface to the flight simulator so it will be
* able to load the module.
*/
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, // FS2004 version (use 0x0800 for FS2002)
NULL
};
// The standard window procedure used by the flight simulator
WNDPROC oldWndProc;
// Flight simulator main window handle
HWND hFSimWindow;
#define MENU_ENTRY "My Mo&dule"
#define ID_MY_MENUITEM 40001
/**
* Main window procedure that is called by the flight simulator to process
* incoming window messages.
*/
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;
// Look for our menu entry in the main menu.
for (i = 0; i < GetMenuItemCount(hMenu); i++) {
char buf[128];
GetMenuString(hMenu, i, buf, 128, MF_BYPOSITION);
if (strcmp(buf, MENU_ENTRY) == 0) {
// It is already here, we do not need to add it again
break;
}
}
if (i < GetMenuItemCount(hMenu)) {
// It is already here, we do not need to add it again
break;
}
/* Create new menu. NOTE: It seems that this will be
* reached more times, so we cannot save the handle, because
* in such case it could be destroyed and we will not have
* any access to it in the simulator.
*/
hMyMenu = CreateMenu();
AppendMenu(hMyMenu, MF_STRING | MF_ENABLED, ID_MY_MENUITEM, "My &First Menu Entry");
// add the created menu to the main menu
AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hMyMenu, MENU_ENTRY);
}
}
break;
case WM_COMMAND:
if (LOWORD(wParam) == ID_MY_MENUITEM) {
// Add your code here
HINSTANCE aux = NULL;
MessageBox(hwnd, "ola", "HURA", MB_OK | MB_ICONEXCLAMATION);
return 0;
}
break;
}
// Call the original window procedure to handle all other messages
return CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam);
}
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
hFSimWindow = FindWindow("FS98MAIN", NULL);
oldWndProc = (WNDPROC)SetWindowLong(hFSimWindow, GWL_WNDPROC, (LONG)FSimWindowProc);
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
Please can you see what I am doing wrong ?
Thank you !! ..
-
Hi,
I made some progresses in the C example, but I have a doubt.
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;
}
Does anyone knows how to refer the entry point on the C# DLL based on that code ?
Regards,
-
Indeed they are but the example to create a new module (and show a popup window) is made in C.
Also, I saw a post here about someone who developped in Delphi.
But I want to do it in C#Can anyone help me ?
Thanks in advance.
-
Hi there,
I am investigating how to create a new FS2004 module using C#.
Does anyone can help me and show me /link me an example ?
Thank you.
Regards,
Bruno Falcão
Creating a module now in VC++ .. Help please! :(
in FSUIPC Support Pete Dowson Modules
Posted
Also, posted the coding snapshots:
On the last one you see the Project Properties: