Solved

AFX_MANAGE_STATE(AfxGetStaticModuleState()) needs to be taken  out

Posted on 2006-06-07
11
729 Views
Last Modified: 2013-12-03
Hi all,
  I got a question that has been bothering me for a long time now. I have 4 builds....debug, unicode debug, release, and unicode release. The macro
"AFX_MANAGE_STATE(AfxGetStaticModuleState())" works fine for all the builds except
unicode release. In order for unicode release to work, I need to take that macro out. Has anyone ever seen this before, or is it just indiginous to my application???

500 pts.

thanks
0
Comment
Question by:Joe_Banks_217
  • 6
  • 5
11 Comments
 
LVL 44

Expert Comment

by:AndyAinscow
Comment Utility
I think if you remove that line then your unicode release version ought to be likely to fail in use.

Are you using any other special flags for the unicode release that you don't for the other builds?
0
 

Author Comment

by:Joe_Banks_217
Comment Utility
no i don't think so andy. what do you think could be causing this?

0
 
LVL 44

Expert Comment

by:AndyAinscow
Comment Utility
From a dll generated by the MFC wizards.

//
//      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.
//

Removing that line *could* be very dangerous.


Your problem - I've not encountered it.  Are you using any other special flags for the unicode release that you don't for the other builds?  (Check your project settings - specifically the 'release' and the 'unicode release' versions)
0
 

Author Comment

by:Joe_Banks_217
Comment Utility
Andy, what do you mean by special flags? Like preprocessor directives?
0
 
LVL 44

Expert Comment

by:AndyAinscow
Comment Utility
yes.
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:Joe_Banks_217
Comment Utility
Andy, could the problem be  because the project has both atl and mfc in it?
0
 
LVL 44

Expert Comment

by:AndyAinscow
Comment Utility
? - but why should it work in debug and non-unicode versions?

If the settings are the same for debug and release then I have no other ideas at present.
0
 
LVL 44

Accepted Solution

by:
AndyAinscow earned 500 total points
Comment Utility
Have you specifically checked if the unicode release is using the shared or the static libraries?
0
 

Author Comment

by:Joe_Banks_217
Comment Utility
Andy, what would shared or static libraries have to do with it?
0
 

Author Comment

by:Joe_Banks_217
Comment Utility
I found this article.

http://www.codeguru.com/cpp/com-tech/atl/atl/article.php/c55/

I kind of thought that it was applicable because it mentions that AfxGetApp() would not work right in such an application. In my application,  two main reasons why the unicode release crashes
are 1) AfxGetApp()->GetProfileString either crashes the program or fails and 2) the interface functions we call crash. However, I still don't really understand the problem, or for that matter how to solve it.




0
 
LVL 44

Expert Comment

by:AndyAinscow
Comment Utility
static/shared linkage.

//          If this DLL is dynamically linked against the MFC         <<------------------ It seems to say only required for shared linkage
//          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.



2) the interface functions we call crash.  
I think this is due to you removing this line AFX_MANAGE_STATE(AfxGetStaticModuleState())
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This is to be the first in a series of articles demonstrating the development of a complete windows based application using the MFC classes.  I’ll try to keep each article focused on one (or a couple) of the tasks that one may meet.   Introductio…
Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
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.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

763 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

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now