Link to home
Start Free TrialLog in
Avatar of jc64
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(AfxGetStaticModuleState());
//               // 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;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Avatar of jkr
jkr
Flag of Germany image

Well, as the comment in your code states:

Just put the function somewhere in the code, accoring to the specs of your legacy app

extern "C" <rettype> PASCAL EXPORT TheExportedFunction(<parameter list>)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  // 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
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.
jc64, are you still with us?
Avatar of jc64
jc64

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()
{
   CAllFunctionExportedfromTheDLL();
}

Please advice me as to how to proceed and change different files.


Thank you to waiting.
ASKER CERTIFIED SOLUTION
Avatar of jkr
jkr
Flag of Germany image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jc64

ASKER

Jkr, I will try your suggestion and will get back to you as soon as finish.

Thanks
Avatar of jc64

ASKER

Jkr, I will try your suggestion and will get back to you as soon as finish.

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)