主项目和dll项目字符集不同,造成的有关问题

主项目和dll项目字符集不同,造成的问题
环境: win7+vs05
问题描述:
1,创建一个dlgTest项目;
2,在该dlgTest解决方案内添加一个win32 DLL项目DllTest;  CDlltest : public CWnd
3,DllTest项目中添加一个函数:
void Create()

void CDlltest::Create()
{

if (!::IsWindow(this->m_hWnd))
{
CWnd* pParentWnd = CWnd::GetDesktopWindow();

this->CWnd::Create(NULL, _T("testdll_msg"),WS_CHILD, CRect(0,0,20,20),pParentWnd,0);

if (!::IsWindow(this->m_hWnd))
{
TRACE("Creat CMyLaserRadar Window Failed!\n");
ASSERT(FALSE);
return ;

}
}
}


4, 在dlgTest项目中加载dll项目的 .lib, .h .dll
5, dlgTest类中加入一个DllTest  m_dt变量; 
6,  在dlgTest中添加一个按钮, 按钮内代码:   m_dt.Create();

问题就在这里:

1,当主项目为unicode,dll项目为unicode时 运行成功;
2,当主项目为unicode,dll项目为多字节时,运行出现错误!
3,当主项目为多字节,dll项目为unicode时 运行出现错误!
4,当主项目为多字节,dll项目为多字节时,运行成功!



错误内容:
主项目和dll项目字符集不同,造成的有关问题 

断点位置:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }



------解决思路----------------------
2个方案
1,必须生成两个dll库,不同的字符集使用对应的dll版本
2,调用之前将字符串转换为对应的dll适合的字符串格式

------解决思路----------------------
可以象WinApi 一样 实现和导出两种版本函数 xxxFunA  xxxxFunW

#if (defined _UNICODE 
------解决思路----------------------
 defined UNICODE)
 #define xxxFun xxxFunW
#else
  #define xxxFun xxxFunA
#endif