• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何在MFC工程中使用ATL::CString?

如何在MFC工程中使用ATL::CString?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl cstring,atl mfc,atl/mfc跟踪工具,atl项目工程师,atl工程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何在MFC工程中使用ATL::CString?
描述:

我写了一个MFC lib其中需要一些第三方用ATL写的类,类中使用了ATL::CString
这些代码不可以修改。为了使用这些类,我做了如下处理
stdafx.h 中做了如下定义:
#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将为显式的
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
#include <afx.h>
#include <afxwin.h>         // MFC 核心组件和标准组件
#include<commctrl.h>
#include <atlbase.h>
#include <atlcoll.h>// CAtlMap CAtlList
#include <atlstr.h>
#include <atltypes.h>
namespace ATL
{ typedef ATL::CAtlStringW  CStringW;
typedef ATL::CAtlStringA  CStringA;
typedef ATL::CAtlString    CString;
}
但是程序编译的时候提示我  error C2872: “CString” : 不明确的符号
也就是我工程中
。。。
CString m_str;
这种定义编译系统不知道CString 是 ATL::CString 还是MFC定义的CString .(MFC 也定义了CString)
但是MFC是在全局域中定义了CString .所以这种冲突发生的原因也就是有的头文件把ATL 这个域导入了全局域(例如通过using namespace ATL)
不知道如何处理(只在stdafx.h) 能避免这种冲突?


解决方案1:

如果你是在VC7下使用第三方的ATL7.0的类,不会存在命名空间冲突,因为CString从MFC7.0中独立出来了(见头文件afxstr.h),ATL和MFC的混合使用实际上用的是一套CString.而且你上面的重定义
namespace ATL
{ typedef ATL::CAtlStringW  CStringW;
typedef ATL::CAtlStringA  CStringA;
typedef ATL::CAtlString    CString;
}不应该、也没必要,反而破坏了两者的兼容性
   如果你是在VC6或以下的版本中使用第三方的ATL7.0的类,那就不好办了。你只好把ATL的CString 定义成其他的名字 CMyAtlString来使用,并将第三方的CString改过来

解决方案2:

记得C语言里好像有
#undef
的预编译头指令
实施把MFC的CString给除掉
#if defined (CString)
#undef CString
#endif
好像是这么使,具体的还得问高手

解决方案3:

学习……

解决方案4:

用using namespace ATL 还不能解决此问题吗?
那只有在CString全部改为ATL::CString


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ATL::CString在dll中使用问题
  • VS下支持MFC的ATL工程,如何默认使用MFC的CString
  • 用ATL::CString,在哪里设置ATL_CSTRING_NO_CRT
  • ATL中CString,list怎么使用,包含哪个头文件中?
  • ATL的CString传递给MFC的CString问题
  • ATL项目中如何将cstring转为string
  • 为什么我用ATL模板生成的COM程序中不能用CString?
  • 如何在ATL建的exe中加入对mfc的支持,比如CString?
  • 急问:atl中可否用cstring类???
  • 在ATL中如何使用MFC的CString类!

相关文章

  • 2017-06-05 怎样导出一个类
  • 2017-06-04 想利用webbrowser实现脱机浏览
  • 2017-06-04 SetUnhandledException处理程序的dll内存错误但不直接重启程序
  • 2017-06-05 DLL文件的内存问题
  • 2017-06-04 接收编辑框如何在接收下一个数据时清空原来的内容
  • 2017-06-04 几句VB代码用VC怎么写?
  • 2017-06-05 类的成员变量前,能不能加__declspecdllexport?
  • 2017-06-04 如何启动MTSExplorer?
  • 2017-06-04 关于IE插件的问题
  • 2017-06-05 我用多媒体定时器,连接出错

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在FormView里何时初始化以及释放COM组件比较合适?
    • cystalreport释放连接
    • 请进来吧,没分了否则我会放他几百分
    • vc60控件问题
    • 各位大侠,求助,小女初次使用VC编写动态库,请指教啊!
    • netmeeting2次开发的问题
    • 再问:如何自动比较版本更新?
    • 如何将开发好的Atl通过IE自动下载到客户端并自动注册
    • 这样的回答简直很扯淡!要么你就说明白点,别说些不计大脑的话了,拜托!
    • 用C去调用一些C++类似的接口函数。

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有