在非MFC程序中引用CString

简介: CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen,strcpy,strstr等等,本文讨论的是在非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、对于没有包含的stdafx.h中,只要包含了afx.h即可,而对于已经包含了的stdafx.h, 一定需要保证afx.h在windows.h之前被包含。另外由于默认的控制台程序采用的单线程运行库,我们要把它改成多线程库,这些工作只要在stdafx.h中进行修改就可以了(详细信息可以参考候捷的<>),我使用的一个stdafx.h的例子如下(这是一个从向导生成的win32位GUI的程序的stdafx.h修改的):

01. // stdafx。h
02. #if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
03. #define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
04.  
05. #if _MSC_VER > 1000
06. #pragma once
07. #endif // _MSC_VER > 1000
08.  
09. #define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
10.  
11. #include < afx.h >  // 加在这里
12.  
13. // Windows Header Files:
14. #include< windows.h >
15.  
16. // C RunTime Header Files
17. #include < stdlib.h >
18. #include < malloc.h >
19. #include < memory.h >
20. #include < tchar.h >
21.  
22. #ifdef _DEBUG
23. #pragma comment(lib, "libcmtd.lib")
24. #else
25. #pragma comment(lib, "libcmt.lib")
26. #endif
27. // Local Header Files
28.  
29. #endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)

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

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

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

1. #ifdef _DEBUG
2. #pragma comment(lib, "libcmtd.lib")
3. #else
4. #pragma comment(lib, "libcmt.lib")
5. #endif

2、工程目录下创建一个DLLMODUL.CPP文件,并且把它加入到当前工程中。

3、打开DLLMODUL.CPP文件,编辑这个文件为这样:

01. #include "stdafx.h"
02. #ifdef _DEBUG
03. #undef THIS_FILE
04. static char THIS_FILE[] = __FILE__;
05. #endif
06.  
07. #define new DEBUG_NEW
08.  
09. ////////////////////////////////////////////////////////////////////
10. // global data
11.  
12. // The following symbol used to force inclusion of this module for _USRDLL
13. #ifdef _X86_
14. extern "C" int _afxForceUSRDLL; }
15. #else
16. extern "C" int __afxForceUSRDLL; }
17. #endif

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

目录
相关文章
【全是精华】Token的获取和使用-FastApi版
【全是精华】Token的获取和使用-FastApi版
1429 0
|
10月前
|
传感器 人工智能 物联网
数字孪生与灾害预测:提升应急响应能力
【10月更文挑战第31天】数字孪生技术通过实时监测、灾害模拟和应急响应优化,显著提升了灾害预测和应急响应能力。本文探讨了其在洪水、地震等自然灾害中的应用,展示了其在提高预警准确性、优化资源配置和提升应急响应效率方面的巨大潜力。
|
9月前
|
存储 Oracle 固态存储
阿里云服务器ESSD云盘性能级别详解
存储性能对于应用的运行效率和用户体验至关重要,阿里云作为领先的云服务提供商,为用户提供了多种存储解决方案,其中ESSD云盘以其高性能和灵活性备受关注。本文将详细介绍阿里云服务器ESSD云盘的四种性能级别——PL0、PL1、PL2和PL3,以及它们各自的单盘IOPS性能上限和容量大小等关键信息,帮助您更好地选择适合自身需求的存储方案。
|
9月前
|
数据安全/隐私保护
什么是正向代理
正向代理是网络代理的一种形式,作为客户端与外部服务器间的中介,接收并转发客户端请求至目标服务器,再将服务器响应转回给客户端。适用于访问受限资源、保护隐私及跨境访问等场景,增强客户端的灵活性和安全性。
197 0
|
11月前
|
JavaScript 前端开发 NoSQL
无界 SaaS 数字生态工具:去平台中心化助力企业数字化转型
无界 SaaS 数字生态工具通过去平台中心化助力企业数字化转型,涵盖技术实现、商业逻辑、数据架构、用户界面设计等多方面。本文提供了一个简化的框架和示例代码,包括前端(React.js)和后端(Node.js + Express)的实现,帮助企业和开发者快速启动项目。示例代码涵盖了用户注册、登录和产品列表的获取功能,并提供了安全性、用户认证、数据确权等方面的注意事项。
|
Python
Python动态IP代理防止被封的方法
Python动态IP代理防止被封的方法
246 3
大模型,到底是什么“大”?
【1月更文挑战第19天】大模型,到底是什么“大”?
576 1
大模型,到底是什么“大”?
|
存储 物联网 程序员
C语言与硬件交互
C语言因其低级别特性和高性能在系统编程和硬件交互中广泛应用。它提供内存操作和底层指令调用来直接控制硬件,尤其是在嵌入式系统、操作系统内核和驱动开发中。通过指针操作内存地址实现硬件寄存器的读写,或使用内联汇编调用底层指令,但要注意权限、内存映射、并发问题和硬件差异。文中还给出了简单的读写硬件状态和控制设备的C语言代码示例。在高级应用中,C语言用于编写驱动程序和实时操作系统,是底层开发的关键技能。
excel 图片地址转成图片
excel 图片地址转成图片
292 1
|
弹性计算
最新阿里云服务器7月租用费用价格表,ECS降价幅度跳水式!
2024年7月,阿里云服务器推出优惠价格,ECS云服务器2核2G3M带宽99元/年,2核4G5M带宽199元/年。香港30M带宽轻量服务器24元/月,4核8G服务器700元/年。此外,提供不同配置的ECS实例,如ECS经济型、u1实例等,价格从99元到327元不等,具体详情可访问阿里云服务器官方页面。