今天在改一个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))
然而报afxwin.inl 21行错误
<!--StartFragment-->是总在trans->Create()处报错,说ASSERT错误:
调试指在下面:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle
因为CSocket用到一个窗体(WSAAsyncSelect),而该窗体用的是主线程的消息循环,且该窗体没有父窗体和子窗体。
所再加入以下行
if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0))