vc++ win32程序中使用MFC
2013-10-23 23:41
155 查看
今天在改一个win32的程序,其中调用了CSOCKET,按以下方法改动项目
1、工程设置中,将MFC的使用由原来的“使用标准windows库”改为“在共享DLL中使用MFC”
如果是英文版,相关选项是:
Microsoft
Foundation Classes: Use MFC in a shared dll, no using
MFC
2、头文件包含
不同的MFC类需包含的头文件是不一样的。
常用的类,如Cstring, Cedit
等,包含afxwin.h就可以了
如果不清楚包含什么头文件的话,可以同msdn进行查询,msdn中,对于MFC类的介绍中,都会给出相应的header
file requirement.
3、#include 语句一定要写在首行
这一点很重要,通常出现前面讲到的windows.h重复包含错误,都是因为#include
语句没有写在首行。
另外还要注意的是,如果#include语句是在一个头文件里,那么对应头文件的包含也要写在首行。示例如下:
=============
test.h文件的内容如下:
#include <afxwin.h>
//保证该语句在首行
test.cpp的文件内容如下:
#include
“test.h” //同样也要保证该语句在首行
=============
如果要用cstring
就包含#include
<afxwin.h>
并且要保证这个包含处于首行
应为要用CSOCKET 所以加入了
if(!AfxSocketInit(NULL))
{
//AfxMessageBox("Could not
initialize Windows Sockets!");
return FALSE;
}
然而报afxwin.inl 21行错误
<!--StartFragment-->是总在trans->Create()处报错,说ASSERT错误:
调试指在下面:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
因为CSocket用到一个窗体(WSAAsyncSelect),而该窗体用的是主线程的消息循环,且该窗体没有父窗体和子窗体。
而创建一个窗体需要一个HINSTANCE还有一个消息循环,在dll中应该用的是Dllmain的HINSTANCE,然后再创建一个线程作为消息循环,而CSocket用的却是WinMain的HINSTANCE,和主消息循环。
由于HINSTANCE的错误,CSocket的Create在运行到CWnd::CreateEx是出错。
所再加入以下行
if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0))
{
return FALSE;
}
1、工程设置中,将MFC的使用由原来的“使用标准windows库”改为“在共享DLL中使用MFC”
如果是英文版,相关选项是:
Microsoft
Foundation Classes: Use MFC in a shared dll, no using
MFC
2、头文件包含
不同的MFC类需包含的头文件是不一样的。
常用的类,如Cstring, Cedit
等,包含afxwin.h就可以了
如果不清楚包含什么头文件的话,可以同msdn进行查询,msdn中,对于MFC类的介绍中,都会给出相应的header
file requirement.
3、#include 语句一定要写在首行
这一点很重要,通常出现前面讲到的windows.h重复包含错误,都是因为#include
语句没有写在首行。
另外还要注意的是,如果#include语句是在一个头文件里,那么对应头文件的包含也要写在首行。示例如下:
=============
test.h文件的内容如下:
#include <afxwin.h>
//保证该语句在首行
test.cpp的文件内容如下:
#include
“test.h” //同样也要保证该语句在首行
=============
如果要用cstring
就包含#include
<afxwin.h>
并且要保证这个包含处于首行
应为要用CSOCKET 所以加入了
if(!AfxSocketInit(NULL))
{
//AfxMessageBox("Could not
initialize Windows Sockets!");
return FALSE;
}
然而报afxwin.inl 21行错误
<!--StartFragment-->是总在trans->Create()处报错,说ASSERT错误:
调试指在下面:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
因为CSocket用到一个窗体(WSAAsyncSelect),而该窗体用的是主线程的消息循环,且该窗体没有父窗体和子窗体。
而创建一个窗体需要一个HINSTANCE还有一个消息循环,在dll中应该用的是Dllmain的HINSTANCE,然后再创建一个线程作为消息循环,而CSocket用的却是WinMain的HINSTANCE,和主消息循环。
由于HINSTANCE的错误,CSocket的Create在运行到CWnd::CreateEx是出错。
所再加入以下行
if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0))
{
return FALSE;
}
相关文章推荐
- VC的Win32控制台程序中使用MFC库文件
- vc++ win32程序中使用MFC——防止重复引用windows.h错误
- FTP 使用程序上传时,会报没有权限…
- win32控制台程序中,使用MFC的方法
- VC程序在非MFC中使用CString
- MFC获取文档&nbsp;视图&nbsp;程序&nbsp;框架类的指…
- VC程序在非MFC中使用CString
- VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
- Win32程序(例如MFC、后台服务等)使用AllocConsole()添加调试用控制台
- VC程序在非MFC中使用CString
- GUI程序如何使用控制台输出调试信息[zz][MFC调用win32窗口显示调试信息,使用AllocConsole 函数 ]
- 在MFC程序中使用VC Components
- VC&nbsp;获得系统时间、程序运行时间、…
- VC6..0的Win32控制台程序中使用CString类
- VC中的Win32应用程序和MFC程序有什么分别
- 在WIN32控制台程序中使用MFC头文件
- Windows MFC 类库使用技巧
- vs 2008 win32程序使用大内存 (>2GB)设置
- 在VS2013 中使用VC 6.0 编写的MFC 程序
- 在WIn32程序中使用MFC的CInternetSession运行异常,主要是因为获取目前应用程序名出错的解决办法