[英]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 對象。
CString
是CStringT類模板的別名。 此類的對象最好不要傳遞給 DLL。 字符串類的字符類型可以是TCHAR
(對於 ANSI 和 Unicode 字符串 - 請參閱下面的說明)。 CString
(和CStringT
)的定義很可能在atlstr.h
頭文件中找到。
LPTSTR
是指向字符序列的常規指針。 數據類型 ( TCHAR*
) 取決於開發環境的設置:如果選擇了“使用 Unicode 字符集”選項,則TCHAR
數據類型將為wchar_t
( LPTSTR
將分別為wchar_t*
)。 如果選擇了“使用多字節字符集”,則TCHAR
將被定義為char
(而LPTSTR
將是char*
)。
所以CString
和LPTSTR
之間的互換性問題並不是那么簡單。 它還取決於 DLL 的編寫方式。 如果 DLL 的設計環境設置與主程序相同,那么CString
和LPTSTR
真的可以互換。
另外,請記住CStirng
是一個有很多方法的類,而LPTSTR
只是一個指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.