[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

Regulat dll using MFC

Posted on 2001-07-06
8
Medium Priority
?
408 Views
Last Modified: 2013-11-20
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;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
0
Comment
Question by:jc64
  • 4
  • 3
8 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 6260826
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
0
 
LVL 2

Expert Comment

by:MadYugoslav
ID: 6264249
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.
0
 
LVL 86

Expert Comment

by:jkr
ID: 6287007
jc64, are you still with us?
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:jc64
ID: 6291092
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.
0
 
LVL 86

Accepted Solution

by:
jkr earned 1200 total points
ID: 6291106
Well, you mainly have it there - just add your code to 'Test.cpp'

extern "C" <rettype> PASCAL EXPORT TheExportedFunction(<parameter list>)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 // normal function body here
}

and supply a separate header "What ever header file is necessary from the dll.h" - OK, just joking, let's call it 'thedll.h':

#ifdef __cplusplus
extern "C"
{
#endif
<rettype> PASCAL EXPORT TheExportedFunction(<parameter list>);
#ifdef __cplusplus
}
#endif

(the #ifdef stuff is necessary to not confuse the compiler in files with a '.c' extension)

Also, supply an entry for 'TheExportedFunction' in 'test.def', as shown above.

Then, compile the DLL and add the '.lib' file that is created to your C project, and it should work.
0
 

Author Comment

by:jc64
ID: 6291602
Jkr, I will try your suggestion and will get back to you as soon as finish.

Thanks
0
 

Author Comment

by:jc64
ID: 6291766
Jkr, I will try your suggestion and will get back to you as soon as finish.

Thanks
0
 
LVL 86

Expert Comment

by:jkr
ID: 6296539
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)
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
The video provides a quick and easy steps to migrate MBOX file to well known Outlook PST and Office 365. Besides this, it also supports and migrates more than 20 email clients of MBOX which include AppleMail, Opera, Thunderbird and SeaMonkey effortl…
Suggested Courses
Course of the Month9 days, 7 hours left to enroll

591 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question