function not working in DLL

The following function works fine when the class "Util" was part of the MFC project I am writing.

void CBBrowserView::DMakeFormPretty()
{
     Util *utilCTRL = new Util;
     if(::IsWindow(m_EnglishCTRL.m_hWnd))
          TRACE("*****DMFP Is Window %d\n",m_EnglishCTRL.m_hWnd);
     else
          TRACE("*****DMFP Not Window %d\n",m_EnglishCTRL.m_hWnd);

     //Init Font Resources for the English Verse
     utilCTRL->ApplyFontToObj(&m_EnglishCTRL,"Courier New",17);

     //Init Font Resources for the Non-English Verse
     utilCTRL->ApplyFontToObj(&m_NonEnglishCTRL,"OLBHEB",17);

     delete utilCTRL;
}

I created an MFC extension DLL and transfered the Util class to it.

The Util class is declared in the "Util.h" class like this:
class AFX_EXT_CLASS Util : public CCmdTarget


I changed the #include statement in the CPP for the "Util.h" to point it to it's new location.
Also, in the Project Settings Link tab, I put the path to the new DLLs .Lib file there.

The function I am calling in the DLL is as follows:
The prototype:

void Util::ApplyFontToObj(CWnd* p_objToApply, CString strFontName, int intFontSize, int intWeight, bool bItalic, bool bUnderline)
{
     CFont     cfFontHolder;  // structure for applying a font to an object
     //Init Font Resources for the search for edit box
     cfFontHolder.CreateFont(intFontSize,0,0,0,intWeight,bItalic,bUnderline,0,
          ANSI_CHARSET,OUT_DEFAULT_PRECIS,
          CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
          DEFAULT_PITCH | FF_SWISS, strFontName);

     if(::IsWindow(p_objToApply->m_hWnd))
          TRACE("*****AFTO Is Window %d\n", p_objToApply->m_hWnd);
     else
          TRACE("*****AFTO Not Window %d\n", p_objToApply->m_hWnd);

     p_objToApply->SetFont(&cfFontHolder);
     cfFontHolder.Detach();  //release DC
}

The ::IsWindows function returns true in the EXE but not in the DLL.  In fact the m_hWnd is zero in the DLL.

Like I said, the Util::ApplyFontToObj function worked just fine when is was implemented in the EXE.  When I implemented it into the DLL the CWnd* p_objToApply variable seems to have lost its refenence.

What is that?

Thanx
Dave
SmaveAsked:
Who is Participating?
 
GGRUNDYCommented:
Your dll project has "Use MFC in a shared Dll".
Your exe project has "Use MFC in a static library".

Change your exe project to "shared dll".

Cheers Greg
0
 
SmaveAuthor Commented:
NOTE: m_EnglishCTRL is a control member variable for an Edit box.

CEdit     m_EnglishCTRL;

Thanx
Dave
0
 
SmaveAuthor Commented:
ALSO: this is the out put from the TRACE macros:
*****DMFP Is Window 1836788
*****AFTO Not Window 0
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

 
GGRUNDYCommented:
First thoughts...
After checking that the "Structure member alignment", code geration option is the same in you exe & dll, I would do a "Rebuild All" (not batch build) on both the exe & dll, keeping fingers & toes firmly crossed.

0
 
GGRUNDYCommented:
(not batch build) - I meant (not incremental build)
0
 
SmaveAuthor Commented:
Tried that.  It didn't work.
0
 
GGRUNDYCommented:
Hmmmmm...
Maybe you will have to zip up both projects and post a link to them for experts to have a closer look.
0
 
SmaveAuthor Commented:
OK.  Will do.  Stand by...
0
 
SmaveAuthor Commented:
Here is the URL to my FTP site.
ftp://24.159.56.211/ProgShare/
Username:IUSER
Password: expert

Download Theo.zip from there.

I am running ZoneAlarmPro, so let me know if you have any problems.

Dave
0
 
SmaveAuthor Commented:
I feel a little stupid.  But, I figured the solution would probably be that dumb.

Question: Why should that matter?

Thanx again
Dave
0
 
SmaveAuthor Commented:
Just a thought.  While you have the project there...

If you have any constructive criticism it would be appreciated.

Thanx again
Dave
0
 
GGRUNDYCommented:
The CWnd structure has different members depending upon whether or not you are linking statically or dynmaically.
The CRuntimeClass::m_pfnGetBaseClass is different.
Makes it difficult when your exe & your dll each have their own opinion of the layout of structures which they pass around.

Cheers
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.