jc64
asked on
Regulat dll using MFC
I have a legacy C application that can use dlls to extend its functionality.
I want to create a "Regular dll with MFC statically linked" project that exports one function. I want the function to contain a dialog that contains two input boxes that is displayed when my legacy application calls the exported function.
When I created the dll project the IDE created for me a file containing code as shown bellow.
I want where should I code the exported function.
How it would look like.
Inside the function how can I create the dialog box with the two input boxes.
Thank you
+++++++++++++++++++dll code created by the VS IDE+++++++// test.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include "test.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetSta ticModuleS tate());
// // normal function body here
// }
//
// It is very important that this macro appear in each
// function, prior to any calls into MFC. This means that
// it must appear as the first statement within the
// function, even before any object variable declarations
// as their constructors may generate calls into the MFC
// DLL.
//
// Please see MFC Technical Notes 33 and 58 for additional
// details.
//
////////////////////////// ////////// ////////// ////////// ////////// ////////// /
// CTestApp
BEGIN_MESSAGE_MAP(CTestApp , CWinApp)
//{{AFX_MSG_MAP(CTestApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
////////////////////////// ////////// ////////// ////////// ////////// ////////// /
// CTestApp construction
CTestApp::CTestApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
////////////////////////// ////////// ////////// ////////// ////////// ////////// /
// The one and only CTestApp object
CTestApp theApp;
++++++++++++++++++++++++++ ++++++++++ ++++++++++ +++++++++
I want to create a "Regular dll with MFC statically linked" project that exports one function. I want the function to contain a dialog that contains two input boxes that is displayed when my legacy application calls the exported function.
When I created the dll project the IDE created for me a file containing code as shown bellow.
I want where should I code the exported function.
How it would look like.
Inside the function how can I create the dialog box with the two input boxes.
Thank you
+++++++++++++++++++dll code created by the VS IDE+++++++// test.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include "test.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetSta
// // normal function body here
// }
//
// It is very important that this macro appear in each
// function, prior to any calls into MFC. This means that
// it must appear as the first statement within the
// function, even before any object variable declarations
// as their constructors may generate calls into the MFC
// DLL.
//
// Please see MFC Technical Notes 33 and 58 for additional
// details.
//
//////////////////////////
// CTestApp
BEGIN_MESSAGE_MAP(CTestApp
//{{AFX_MSG_MAP(CTestApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////
// CTestApp construction
CTestApp::CTestApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
//////////////////////////
// The one and only CTestApp object
CTestApp theApp;
++++++++++++++++++++++++++
If You use static linked MFC there are is no nedd to call MACRO AFX_MANAGE_STATE.
If you include definition file (.DEF) in your project there is no need to special declaration for exported function.
If you include definition file (.DEF) in your project there is no need to special declaration for exported function.
jc64, are you still with us?
ASKER
jkr, I am sorry I was away for work and just came back.
First I increated the points to 300 as this is important to me. second here are the steps I took to write an MFC dll that exports one function that when called displays a dialog that contains two text boxes.
1 - Create a new porject "MFC AppWizard[dll]"
2 - Regular DLL with MFC Statically linked
The IDE created the following files.
- Test.h
- Test.cpp
- Test.DEF
* Test = project Name
I added the project a new Form using insert-New Form
The IDE Created two files
- DTest.h
- DTest.cpp
* DTest = Dialog Name
Now I don't know how to proceed after that.
I want to create a C program and call the exported function from the dll above as
#include "What ever header file is necessary from the dll"
main()
{
CAllFunctionExportedfromTh eDLL();
}
Please advice me as to how to proceed and change different files.
Thank you to waiting.
First I increated the points to 300 as this is important to me. second here are the steps I took to write an MFC dll that exports one function that when called displays a dialog that contains two text boxes.
1 - Create a new porject "MFC AppWizard[dll]"
2 - Regular DLL with MFC Statically linked
The IDE created the following files.
- Test.h
- Test.cpp
- Test.DEF
* Test = project Name
I added the project a new Form using insert-New Form
The IDE Created two files
- DTest.h
- DTest.cpp
* DTest = Dialog Name
Now I don't know how to proceed after that.
I want to create a C program and call the exported function from the dll above as
#include "What ever header file is necessary from the dll"
main()
{
CAllFunctionExportedfromTh
}
Please advice me as to how to proceed and change different files.
Thank you to waiting.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Jkr, I will try your suggestion and will get back to you as soon as finish.
Thanks
Thanks
ASKER
Jkr, I will try your suggestion and will get back to you as soon as finish.
Thanks
Thanks
Thanx, but you shouldn't accept an answer unless you really know that it works for you (though I have no doubt it will :o)
Just put the function somewhere in the code, accoring to the specs of your legacy app
extern "C" <rettype> PASCAL EXPORT TheExportedFunction(<param
{
AFX_MANAGE_STATE(AfxGetSta
// normal function body here
}
To make sure that the function is exported exactly the way you want (keeping the exat name without e.g. an underscore), additionally add a '.def' file to your project:
LIBRARY mydll
DESCRIPTION 'comment about all that'
EXPORTS
TheExportedFunction