`
xiang37
  • 浏览: 426762 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在非MFC程序中引用CString

 
阅读更多

 

  CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen,strcpy,strstr等等,本文讨论的是在非mfc程序中使用CString类的方法,算是个引子,如果有更好的实现方法,欢迎大家讨论。
  为了使用CString类,首先源文件必须是以cpp结尾的,这是因为vc默认对不同的扩展名采用不同的编译方法和错误检查,mfc的支持文件Afx.h只有由cpp为扩展名的文件包含才能够正常编译。对于exe和库要采用不同的方式。下面分别讨论:

一、在非dll或者lib的工程里,使用CString非常容易,只要两步:

1、对于没有包含<Windows.h>的stdafx.h中,只要包含了afx.h即可,而对于已经包含了<windows.h>的stdafx.h, 一定需要保证afx.h在windows.h之前被包含。另外由于默认的控制台程序采用的单线程运行库,我们要把它改成多线程库,这些工作只要在stdafx.h中进行修改就可以了(详细信息可以参考候捷的<<mfc 深入浅出>>),我使用的一个stdafx.h的例子如下(这是一个从向导生成的win32位GUI的程序的stdafx.h修改的):

 

  // stdafx。h
  #if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
  #define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
  
  #if _MSC_VER > 1000
  #pragma once
  #endif // _MSC_VER > 1000
  
  #define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
  
  #include <afx.h>  // 加在这里
  
  // Windows Header Files:
  #include <windows.h>
  
  // C RunTime Header Files
  #include <stdlib.h>
  #include <malloc.h>
  #include <memory.h>
  #include <tchar.h>
 
  #ifdef _DEBUG
   #pragma comment(lib, "libcmtd.lib")
  #else
   #pragma comment(lib, "libcmt.lib")
  #endif 
  // Local Header Files
  
  #endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
 

这样就可以在程序中正常使用CString类了。

二、在dll或者lib的工程中,由于afx.h默认带了一个DllMain,致使要使用CString类需要几个步骤。

1、首先和控制台程序一样,如果编译环境设置了采用单线程库, 要改成多线程库,这个可以从工程属性里进行修改,详细信息可以参考候捷的<<mfc 深入浅出>>. 下面给出的是我常用的方式,可以直接把它复制到工程里使用:

 

  #ifdef _DEBUG
   #pragma comment(lib, "libcmtd.lib")
   #else
   #pragma comment(lib, "libcmt.lib")
   #endif     
 

2、工程目录下创建一个DLLMODUL.CPP文件,并且把它加入到当前工程中。
3、打开DLLMODUL.CPP文件,编辑这个文件为这样:

 

 #include "stdafx.h"
   #ifdef _DEBUG
   #undef THIS_FILE
   static char THIS_FILE[] = __FILE__;
   #endif
   
   #define new DEBUG_NEW
   
   /////////////////////////////////////////////////////////////////////////////
   // global data
   
   // The following symbol used to force inclusion of this module for _USRDLL
   #ifdef _X86_
   extern "C" { int _afxForceUSRDLL; }
   #else
   extern "C" { int __afxForceUSRDLL; }
   #endif  
 

 4、打开stdafx.h,把afx.h包含在windows.h前面。现在可以正常的使用CString了。

 

It's from http://www.vckbase.com/document/viewdoc/?id=1437;

分享到:
评论

相关推荐

    unicode字符串

    - "在非MFC程序中引用CString .txt" 提及了MFC(Microsoft Foundation Classes)框架之外的程序如何使用 CString 类型,这个类在处理字符串时经常用到Unicode。 - "宽窄字符.txt" 可能专门讨论宽字符和窄字符的概念...

    CString类型转换为CTime类型的函数

    在C++编程中,尤其是在使用MFC(Microsoft Foundation Classes)框架进行Windows应用程序开发时,数据类型的转换是经常遇到的任务之一。本篇文章将详细介绍如何将`CString`类型的数据转换为`CTime`类型,这对于处理...

    CString类源代码,共享

    在C++编程中,`CString`是一个非常重要的字符串类,尤其在Microsoft的MFC...在实际项目中,`CString`常用于Windows应用程序开发,尤其是在MFC框架下,它极大地简化了字符串操作,提高了代码的可读性和维护性。

    利用MFC中时钟程序代码

    在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 框架下创建一个带窗口的时钟程序。MFC 是微软为Windows应用程序开发提供的一种C++库,它封装了Windows API,使得开发者可以更高效、更方便地编写...

    自己MFC写的程序

    开发者可以通过资源编辑器设计界面,然后在代码中通过ID引用。 总结,这个“自己MFC写的程序”实例展示了如何利用MFC进行文件路径获取,并结合Windows API启动多个应用程序。通过理解MFC的类库和事件驱动模型,...

    VS2010中MFC读写Excel

    在Microsoft Visual Studio 2010 (VS2010) 中,开发人员可以利用MFC(Microsoft Foundation Classes)库来实现对Excel文件的操作,包括读取、写入和创建Excel表格。MFC是Microsoft提供的一套C++类库,它简化了...

    Cstring 与BYTE类型之间转换

    `CString`是Microsoft MFC(Microsoft Foundation Classes)中的一个类,用于处理字符串。相比于C++标准库中的`std::string`,`CString`提供了更多的功能和更简便的操作接口。它支持各种字符串操作,如拼接、分割、...

    关于CString 变量的错误

    10. 使用范围:在VC2005中,确保使用的是MFC库,并且在头文件中包含了`#include &lt;afxstr.h&gt;`或`#include &lt;atlstr.h&gt;`,以便使用CString类。 综上所述,解决“关于CString 变量的错误”可能需要检查代码中的字符串...

    MFC 实现读取文件中的数字,并求和

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来实现一个对话框应用程序,该程序能够读取包含字符串和数字的文件,并计算其中所有数字的总和。MFC 是 Microsoft 提供的一个 C++ 类库,用于...

    MFC调用Access数据库

    在Microsoft Foundation Classes (MFC) 中调用Access数据库是一个常见的任务,这主要涉及到数据库编程,尤其是在Windows应用程序开发中。MFC提供了一套丰富的类库,使得开发者能够方便地与各种数据库系统,包括...

    MFC中动态创建多个按钮

    在MFC(Microsoft Foundation Classes)框架中,动态创建控件是一项常见的需求,特别是当你需要根据程序运行时的具体情况创建不同的用户界面元素时。本篇主要介绍如何在MFC的对话框中动态创建多个按钮,并在不再需要...

    wmp.rar_C 界面MFC_MFC media_media player mfc_mfc player_wmp MFC

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个C++应用程序,该程序能够调用Windows Media Player (WMP) 播放视频。MFC是微软提供的一种C++类库,它使得开发Windows应用程序变得...

    编译出错的VC ACE的MFC程序

    在VC ACE环境中开发MFC程序时,可能会遇到各种编译错误,这通常涉及到C++语法、库函数不兼容、头文件引用、链接问题或者是项目设置等多方面的问题。以下是一些可能遇到的知识点以及解决方法: 1. **C++语法错误**:...

    MFC中用MSChart绘制图表

    在Microsoft Foundation Classes (MFC)框架中,使用MSChart控件可以帮助我们轻松地在应用程序中绘制各种复杂的图表,如柱状图、折线图、饼图等。MSChart控件是微软提供的一种可视化组件,它基于ActiveX技术,可以在...

    MFC C++ 读取磁盘容量和剩余容量

    在IT行业中,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于构建Windows应用程序。MFC封装了许多Windows API,使得开发人员能够更容易地访问操作系统功能,如文件系统操作。本文将深入探讨如何...

    2 C++MFC对话框程序设计示例详解.pdf

    为编辑框设置成员变量是为了在程序代码中引用这些控件的值。MFC中的编辑框控件与C++的Cstring类型关联,因为Cstring能够更方便地处理字符串数据。为按钮设置消息映射是将按钮的点击事件与特定的处理函数相连接。这样...

    MFC课设 自己做的课设

    在MFC中,资源管理是通过资源脚本完成的,开发者需要了解如何在代码中引用这些资源。 总的来说,这个MFC课设项目涵盖了C++编程、MFC框架的理解与应用、图形用户界面设计、图像处理、文本渲染、动画效果实现等多个...

    MFC中通过webbrowser控件操作网页。

    在Microsoft Foundation Classes (MFC)框架中,WebBrowser控件是一个强大的工具,它允许开发者在桌面应用程序中嵌入Web浏览器的功能。这个控件是基于Internet Explorer的ActiveX控件,因此,它可以执行大部分IE浏览...

Global site tag (gtag.js) - Google Analytics