繁体   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