天天看點

在非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修改的):

<code>01.</code><code>// stdafx。h</code>

<code>02.</code><code>#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)</code>

<code>03.</code><code>#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_</code>

<code>04.</code> 

<code>05.</code><code>#if _MSC_VER &gt; 1000</code>

<code>06.</code><code>#pragma once</code>

<code>07.</code><code>#endif // _MSC_VER &gt; 1000</code>

<code>08.</code> 

<code>09.</code><code>#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers</code>

<code>10.</code> 

<code>11.</code><code>#include &lt; afx.h &gt;  // 加在這裡</code>

<code>12.</code> 

<code>13.</code><code>// Windows Header Files:</code>

<code>14.</code><code>#include&lt; windows.h &gt;</code>

<code>15.</code> 

<code>16.</code><code>// C RunTime Header Files</code>

<code>17.</code><code>#include &lt; stdlib.h &gt;</code>

<code>18.</code><code>#include &lt; malloc.h &gt;</code>

<code>19.</code><code>#include &lt; memory.h &gt;</code>

<code>20.</code><code>#include &lt; tchar.h &gt;</code>

<code>21.</code> 

<code>22.</code><code>#ifdef _DEBUG</code>

<code>23.</code><code>#pragma comment(lib, "libcmtd.lib")</code>

<code>24.</code><code>#else</code>

<code>25.</code><code>#pragma comment(lib, "libcmt.lib")</code>

<code>26.</code><code>#endif</code>

<code>27.</code><code>// Local Header Files</code>

<code>28.</code> 

<code>29.</code><code>#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)</code>

這樣就可以在程式中正常使用CString類了。

二、在dll或者lib的工程中,由于afx.h預設帶了一個DllMain,緻使要使用CString類需要幾個步驟。

1、首先和控制台程式一樣,如果編譯環境設定了采用單線程庫, 要改成多線程庫,這個可以從工程屬性裡進行修改,詳細資訊可以參考候捷的&lt;&gt;. 下面給出的是我常用的方式,可以直接把它複制到工程裡使用:

<code>1.</code><code>#ifdef _DEBUG</code>

<code>2.</code><code>#pragma comment(lib, "libcmtd.lib")</code>

<code>3.</code><code>#else</code>

<code>4.</code><code>#pragma comment(lib, "libcmt.lib")</code>

<code>5.</code><code>#endif</code>

2、工程目錄下建立一個DLLMODUL.CPP檔案,并且把它加入到目前工程中。

3、打開DLLMODUL.CPP檔案,編輯這個檔案為這樣:

<a href="http://www.vckbase.com/index.php/wv/1156#viewSource">view source</a>

<code>01.</code><code>#include "stdafx.h"</code>

<code>02.</code><code>#ifdef _DEBUG</code>

<code>03.</code><code>#undef THIS_FILE</code>

<code>04.</code><code>static</code> <code>char</code> <code>THIS_FILE[] = __FILE__;</code>

<code>05.</code><code>#endif</code>

<code>06.</code> 

<code>07.</code><code>#define new DEBUG_NEW</code>

<code>09.</code><code>////////////////////////////////////////////////////////////////////</code>

<code>10.</code><code>// global data</code>

<code>11.</code> 

<code>12.</code><code>// The following symbol used to force inclusion of this module for _USRDLL</code>

<code>13.</code><code>#ifdef _X86_</code>

<code>14.</code><code>extern</code> <code>"C"</code> <code>{ </code><code>int</code> <code>_afxForceUSRDLL; }</code>

<code>15.</code><code>#else</code>

<code>16.</code><code>extern</code> <code>"C"</code> <code>{ </code><code>int</code> <code>__afxForceUSRDLL; }</code>

<code>17.</code><code>#endif</code>

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

繼續閱讀