非MFC工程使用MFC库时的问题及解决办法

非MFC工程使用MFC库小结 一般的非MFC工程可以在包含相关头文件后(如afx.h),就可以使用里面封装的类了。 但是可能存在以下一些问题: 1、afx.h中已经包含了windows.h头文件,但是在非MFC工程中,也包含了了windows.h,因此会提示报错。一般在stdafx.h中的windows.h注释掉,然后写上afx.h即可。 2、部分宏重复定义,如默认DLL库的工程属性中的预处理器中,已经定义了宏_USRD 阅读详情

 

非MFC工程使用MFC库时的问题及解决办法

 

最近正在写一个3ds max的模型导入插件,要求能够将自定义格式的三维模型文件导入到max中进行编辑。Max SDK提供了写这种插件的接口,可以在示例工程上直接进行修改,但这些工程都是标准C工程(未使用MFC)。非MFC工程创建时是不支持MFC特性的,也就是说在这些工程中不能使用MFC库中的类,如CString,CArray等等;然而我们在处理实际问题时却常常会有使用这些类的希望,因为很多时候它们可以使事情更加简单化,例如,要从指定的目录中搜索满足条件的文件,用CFileFind类将会非常方便。可能有人会说,为何不在一开始就创建MFC工程呢?问题在于MFC工程会产生很多向导生成代码,如基于单文档的工程会有View,Doc等类,很多时候我们只需要一个空工程就可以了;而且,我们可能经常会在已有的工程上直接进行修改、再加工。

非MFC工程使用MFC库时最常见的问题就是windows.h重复包含错误,具体如下:

fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #i nclude <windows.h>

 

1、工程à设置中,将MFC的使用由原来的“no using MFC(不使用MFC)”改为“Use MFC in a shared dll(在共享DLL中使用MFC)”

2、头文件包含

不同的MFC类需包含的头文件是不一样的。

常用的类,如CString, CEdit 等,包含afxwin.h就可以了,CFileFind需要包含afx.h,即#i nclude <afx.h>

如果不清楚包含什么头文件的话,可以同msdn进行查询,msdn中,对于MFC类的介绍中,都会给出相应的header file requirement.

3、#include 语句一定要写在首行

这一点很重要,通常出现前面讲到的windows.h重复包含错误,都是因为#i nclude 语句没有写在首行。

另外还要注意的是,如果#i nclude语句是在一个头文件里,那么对应头文件的包含也要写在首行。示例如下:

=============

test.h文件的内容如下:

#include <afxwin.h> //保证该语句在首行

#include …

 

test.cpp的文件内容如下:

#i nclude “test.h” //同样也要保证该语句在首行

#include …

=============

4. error LNK2005: _DllMain@12 already defined

只需要在工程设置里面,把WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,MSGBOX_EXPORTS,_WINDLL,_AFXDLL
中的_USRDLL,删除,就可以正确编译了

 

CFileFind搜索目录下所有文件的类 /** ===================================================== 功能: CFolderContent类搜索一个目录, 列出该目录下的所有目录名称,列出所有子目录下的文件名称等属性。 作者: jef 作者邮箱: dungeonsnd@126.com 发步时间: 20100311 版本: v1.1 版权: 请遵循GNU. 对外接口: int GetAllSub(CString csPath) csPath: 一个目录或者一个完整的文件名 使用举例: void CGetFolderContentView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CString cs,csSaveFileName,csFileSave,csT,csT1; cs ="C:\\Documents and Settings\\All Users\\Documents\\My Music"; char chModule[8192]; memset(chModule,0,8192); GetModuleFileName(NULL,chModule,8192); csT.Format("%s",chModule); csT =csT.Left( csT.ReverseFind(_T('\\')) ); csSaveFileName =csT+_T("\\FolderContent输出文件.txt"); CRect rtClient; GetClientRect(&rtClient); CClientDC dc(this); dc.SetTextColor(RGB(200,80,80)); dc.FillSolidRect(rtClient,RGB(240,240,240)); CFolderContent fc; fc.GetAllSub(cs); int i,len,k; csT ="-------"; csT =cs+"总大小为"; csT1.Format(" %.4fMB,清单文件已保存在 %s",fc.m_dTotalSize/double(1024*1024),csSaveFileName); csT +=csT1; csT +="-------"; dc.TextOut(5,0,csT); csFileSave +=csT+_T("\r\n"); csT ="-------"; csT +="所有子目录如下:"; csT +="-------"; dc.TextOut(5,25,csT); csFileSave +=csT+_T("\r\n"); len =fc.m_Directory.GetSize(); for (i=0;i<len;i++) { csT.Format(" 大小:%.4fMB",fc.m_vecDirectorySize[i]/double(1024*1024)); csT1.Format(" 创建时间:%d年%d月%d日 ", fc.m_vecFileLastCreationTime[i].wYear, fc.m_vecFileLastCreationTime[i].wMonth, fc.m_vecFileLastCreationTime[i].wDay); csT =csT+csT1; csT =fc.m_Directory.GetAt(i)+csT; dc.TextOut(5,(i+2)*20,csT); csFileSave +=csT+_T("\r\n"); } k =i; csT ="-------"; csT +="所有文件如下:"; csT +="-------"; dc.TextOut(5,(k+3)*20,csT); csFileSave +=csT+_T("\r\n"); len =fc.m_PathNameExt.GetSize(); for (i=0;i<len;i++) { csT.Format(" 大小:%.4fMB",fc.m_vecFileSize[i]/double(1024*1024)); csT1.Format(" 修改时间:%d年%d月%d日 ", fc.m_vecFileLastWriteTime[i].wYear, fc.m_vecFile 立即下载

相关推荐

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

afxgetapp->afxmainwnd 与afxgetmainwnd的区别 /线程中调用afxgetmainwnd的问题

在对话框中创建了一个新线程,在线程中调用afxgetmainwnd()获取主程序的句柄,程序出现莫名其妙的崩溃,调试发现在线程中通过afxgetmainwnd()是不能得到主程序的句柄, 只有通过CMainFrame *pMainFrm = (CMainFrame *)(afxgetapp()->afxmainwnd());才能得到主程序的句柄。 afxgetmainwnd()得到的是当前线程

yueye30121的专栏 1039

节卡Jaka Zu APP编程避坑指南:从频繁通讯错误到稳定Socket交互的调试心得

本文详细解析了节卡Jaka Zu APP编程中常见的通讯错误问题,并提供了从基础排查到高级调试的完整解决方案。通过优化网络配置、固件匹配、心跳机制和数据交互规范,开发者可实现稳定的Socket通讯,有效提升工业机器人操控的可靠性。文章特别针对v1.6.7.3版本的典型问题给出了实用调试技巧。

weixin_42639633的博客 322

VC++ ADO连接SQL Server问题与解决方案

以前没有用VC连接过数据库,今天由于帮人做毕设 就尝试了一下。 (1)建立ODBC数据源。 参考方法: www.gz9f.com/jiaocai/hcc/hcc6/hcc6-p1/hcc6-p1.htm

jiahehao的专栏 1714

机器学习——Anaconda下载安装教程

Anaconda详细下载安装教程

2401_83693485的博客 3065

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1232

C++:在非MFC程序中如何引用CString?

C++:在非MFC程序中如何引用CString?   CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在一些地方并不支持这个类,的的确确会有很大的不方便,本文讨论的是在非mfc程序中使用CString类的方法,算是个引子,如果有更好的实现方法,欢迎大家讨论。 为了使用CString类,首先源文件必须是以cpp结尾的,这是因为vc默认对不同的

1万+

使用LabVIEW创建和分析柱状图:从基础绘制到高级数据分析的完整指南

LabVIEW,全称为Laboratory Virtual Instrument Engineering Workbench,是由美国国家仪器公司(National Instruments, NI)开发的一款图形化编程语言。自1986年首次推出以来,LabVIEW凭借其强大的数据采集、分析和控制能力,在工程、科研、教育等领域得到了广泛应用。与传统的文本编程语言不同,LabVIEW采用了图形化编程方式,用户通过连接不同的函数节点来实现复杂的逻辑和算法。

qq_38334677的博客 775

AfxGetApp()的使用

参考文章:http://blog.csdn.net/willon_tom/article/details/2716564 AfxGetApp( )是全局的。 AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。 m_pMainWnd 这是一个匈牙利表示法。m_p开头表示该变量为某个类的成员变量,变量类型为

高调做事,低调做人 1890

AI Agent Harness Engineering 的“热插拔”能力:模块化设计思路

本文我会结合我在大厂做AI Agent平台的实战经验,从核心概念、架构设计、代码实现、落地实战多个维度,给大家详细讲解AI Agent Harness Engineering的核心能力——热插拔的模块化设计思路。我们会从问题根源出发,一步步搭建一个完整的支持热插拔的Agent Harness框架,包含组件抽象、注册中心、生命周期管理、配置驱动、容错机制等核心模块。

AI天才研究院 501

Arcgis中的模型构建器技术之按属性批量建库并对应输出

好久没更新了,之前我们已经介绍过四至点提取模型,前两天有同事问怎么样按属性批量建数据库并对应输出相关图斑。比如将一个县的永农数据按乡镇建立数据库并将对应乡镇的永农数据输出到相应的数据库里。今天就介绍一下相关的模型构建过程。

weixin_44671081的博客 518

升级到VS2015 的 RC 文件包含 afxres.h,编译报错的解决办法

一些升级上来的工程内,rc 文件包含了 afxres.h,vs2015 内又找不到, 可以直接在 rc 文件内将包含 afxres.h 字样的都删除,在最上面加一行 #include "winres.h" 即可

Roc Cliff 1万+

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2131

非MFC工程使用MFC库时的问题及解决办法【转贴】

非MFC工程使用MFC库时的问题及解决办法Peter Lee 2005.08.20一、问题由来  vc6和vc71的工程向导中都包含非MFC的工程,诸如win32 console project, win32 static library。非MFC工程创建时是不支持MFC特性的,然后我们在处理实际问题时有时会用到MFC相关类,如Cstring, Cedit等等,这是很正常的。可

一兰阳光 1172

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

非MFC工程中使用MFC库

原文链接:http://blog.csdn.net/luoweifu/article/details/41527069 需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console Application、MFC Application、Win32 Project等。在创建MFC工程时,通过IDE的向导会自动帮我们创建相应的类文件和包含必需的头文件,但

Cesar Wu 959

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

非MFC中使用MFC类

转载于:http://hi.baidu.com/moonblind/item/8324e8a51f1920db5bf1910a 一、问题由来 vc6和vc71的工程向导中都包含非MFC的工程,诸如win32 console project, win32 static library。非MFC工程创建时是不支持MFC特性的,然后我们在处理实际问题时有时会用到MFC相关类,如C

1288

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

非MFC工程,采用静态链接MFc时,出现无法解析的外部符号CoInitialize

        在vs2005下开发出一个从wav到wma转换的demo(不是mfc程序)。这个demo中使用windows media format sdk 9.0进行从wav到wma 的转换。在我的开发环境中使用的很好,只是一移动到没有vs2005开发环境的平台上(windows xp),就出现提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”     

seawt的专栏 4883

MFC工程中无法使用cygwin64的库

开始想在MFC程序中使用cygwin64的库(静态库, 动态库(静态包含), 动态库(动态调用)). 做实验之前, 想想只要将gnu的功能封装成库(只需要封装成接口, 逻辑部分可以不动或轻微修改), 给自己工程用, 前景多美好. 现实很骨感. 试过了, 都不行, 走弯路了. cygwin64官方文档上, 关于DLL这块, 也是给可以替换CRTinit这种VS工程用的. 如果像MFC这种框架型的工程, 根本没办法替换CRTInit的操作. 总之, 想将gnu实现包进自己工程用, 和cygwin64官方的思路就

博客标题不能为空 1247

VS2017编写MFC库以及使用Qt调用MFC库方法

若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/95052025 目录 前言 Demo 使用VS7建立MFC动态链接库 前提:需要安装VS中的MFC环境 建立MFC动态链接库 编写测试函数 动态库所需...

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 5万+
下一篇: WinRAR命令行参数
jiangdf
博客等级 码龄19年 86粉丝 41原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值