簡體   English   中英

MFC CString 和 LPTSTR 是否可以互換?

[英]Are MFC CString and LPTSTR interchangeable?

我正在嘗試將 DLL 與 ANSI C 編譯器一起使用。 DLL 函數之一采用空指針。 在與 DLL 一起提供的一些示例 Windows 代碼中,傳遞給函數的結構被定義為具有三個 CString 實體。 我已經告訴 DLL 的作者,他們不應該通過他們的 DLL 函數傳遞 MFC 類。 他們告訴我只是用 char 數組替換結構中的 CString 聲明,應該沒問題。 我 99% 肯定那是錯的,但是因為我沒有 VC++ 並且沒有任何 MFC 經驗,而且因為我看到一些帖子說 LPTSTR 可以代替 CString (什么是CString ? ),我開始懷疑我是不是錯了。

有人可以幫我確認 CString 和 LPTSTR 作為函數的參數不能互換嗎? 如果您可以提供 CString 類定義的源代碼,那將很有幫助,因此我可以將其發送給 DLL 的作者並解釋 char 數組的內存占用與 CString 類不同,並且您可以't 傳遞一個指向用 char 數組定義的結構的指針,然后將其視為一堆 CString 對象。

CStringCStringT類模板的別名。 此類的對象最好不要傳遞給 DLL。 字符串類的字符類型可以是TCHAR (對於 ANSI 和 Unicode 字符串 - 請參閱下面的說明)。 CString (和CStringT )的定義很可能在atlstr.h頭文件中找到。

LPTSTR是指向字符序列的常規指針。 數據類型 ( TCHAR* ) 取決於開發環境的設置:如果選擇了“使用 Unicode 字符集”選項,則TCHAR數據類型將為wchar_tLPTSTR將分別為wchar_t* )。 如果選擇了“使用多字節字符集”,則TCHAR將被定義為char (而LPTSTR將是char* )。

所以CStringLPTSTR之間的互換性問題並不是那么簡單。 它還取決於 DLL 的編寫方式。 如果 DLL 的設計環境設置與主程序相同,那么CStringLPTSTR真的可以互換。

另外,請記住CStirng是一個有很多方法的類,而LPTSTR只是一個指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM