vc++ win32程序中使用MFC

今天在改一个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;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值