`

非MFC中使用Cstring

阅读更多

强转一下,在cstring前加上(LPCTSTR)。
--------



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 

分享到:
评论

相关推荐

    非MFC工程使用CString

    要在非 MFC 工程中使用 CString,可以按照以下步骤操作: 1. **添加必要的头文件**: - 在你的源代码文件顶部加入 `#include &lt;afx.h&gt;`。 - 注意:`&lt;afx.h&gt;` 是 MFC 的入口文件,包含了 MFC 的所有核心定义和声明...

    QT中使用MFC的例子 可使用CString、MessageBox等MFC类和方法

    一个QT使用MFC的例子,示例为QT工程,其中引入MFC库,使用CString类,MessageBox方法进行了验证。示例工程为QT4+VS2013。此方式在QT3,QT4,QT5和VC6,VS2013,VS2015,VS2018中亦可使用。

    在非MFC程序中引用CString

    #### 为什么需要在非MFC程序中使用CString? 1. **兼容性与灵活性**:有时候项目需求可能会变化,原本基于MFC的程序需要转换成基于SDK的程序,这时如果能够在非MFC环境下继续使用 `CString` 将大大提高代码的可重用...

    MFC字符串CString 操作用法详解

    其中,`CString`是MFC中用于处理字符串的一个重要类。本文将详细介绍`CString`的各种构造方法以及常用的操作函数,并通过实例来帮助读者更好地理解和使用这些函数。 #### 二、CString构造函数详解 `CString`提供了...

    mfc cstring中文转char*

    介绍mfc的cstring包含中文时转换成char*的两种方法

    MFC中CString的使用介绍

    MFC 中 CString 的使用介绍 在 MFC 程序中,使用 CString 来处理字符串是一个很不错的选择。CString 既可以处理 Unicode 标准的字符串,也可以处理 ANSI 标准的字符串。CString 的 Format 方法给我们进行字符串的...

    MFC 数值转换 CString >> HEX>>DEC>> CString

    这里使用的`Format`函数是`CString`类的一个成员函数,它接受一个格式化字符串和相应的参数,然后将结果存储在`CString`对象中。`"%02X"`表示将参数转换为十六进制形式,并确保至少有两位数字。 ##### 3.2 十六进制...

    从MFC中抽出的CString类

    【描述】提到的"从MFC中抽出的CString类"意味着这个类已经被提取出来,不再依赖于完整的MFC库,因此可以在控制台程序或非MFC的C++项目中单独使用。这样做的好处是,即使不使用整个MFC框架,开发者也能利用CString的...

    MFC C++中CString的相关函数说明

    MFC(Microsoft Foundation Classes)是一个...需要注意的是,CString类的使用在非MFC项目中可能需要额外的配置。此外,在使用过程中,应确保对CString对象的操作不会超出其实际存储长度,以避免可能的内存越界问题。

    C++中MFC开发CString类转换函数大全

    C++中MFC开发CString类转换函数大全,涵盖以下函数: CString stringtoC(string x);//string类转CString类 string Ctostring(CString x);//CString类转string类 double Ctodouble(CString x);//CString类转double类...

    MFC CString字符串分割.txt

    MFC CString 字符串分割的详细代码和注释,方便有这方面困扰的童鞋借鉴使用,该例子代码适用绝多数含有分割符字符串的分割

    Linux下MFC的CString源码移植

    标题“Linux下MFC的CString源码移植”表明我们需要将MFC中的CString类的功能实现移植到Linux环境,以便在不依赖MFC的情况下,能在Linux下使用类似的功能。 **CString与std::string的区别** 1. **内存管理**:...

    ( C++_MFC_CString

    在MFC中,CString经常与控件如CEdit或CListBox结合使用,通过`SetWindowText`或`GetWindowText`等函数交换数据。 总的来说,C++的MFC库中的CString类为Windows开发提供了强大且方便的字符串处理工具,它简化了字符...

    mfc关于CString的所有操作

    在Microsoft Foundation Classes (MFC)库中,`CString`是一个非常重要的类,它提供了一种方便的方式来处理和操作字符串。`CString`类是基于C++的,它在内存管理、字符串连接、格式化等方面提供了很多便利的方法。...

    C#实现 MFC的CString字节数组转换为C#的String

    C#实现 MFC的CString字节数组转换为C#的String 由于项目需要兼容老的MFC软件所保存的文档,而这些文档中又包含了CString数据,所以研究了一下CString保存结构,写了这个类。

    MFC中怎么把CString转换成char*

    由于MFC中的`CString`类提供了丰富的字符串操作功能,因此在许多情况下,开发者会选择使用`CString`来处理文本数据。然而,在某些场景下,如与C语言库函数交互或与其他不支持`CString`的数据结构进行交互时,可能...

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

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

    gtest1.7编译支持unicode测试和MFC 支持CString的使用

    MFC中的CString类是一个强大的字符串类,类似于C++标准库中的std::string,但提供了与MFC框架更紧密的集成。它支持多种操作,如连接、查找、替换等,并且在处理Windows API时非常方便。然而,gtest默认可能不直接...

Global site tag (gtag.js) - Google Analytics