MFC CString和LPTSTR是否可互换?

问题描述 投票:0回答:1

我正在尝试将DLL与ANSI C编译器一起使用。 DLL函数之一采用空指针。在DLL提供的一些示例Windows代码中,传递给函数的结构定义为具有三个CString实体。我已经告诉DLL的作者,他们不应该通过其DLL函数传递MFC类。他们告诉我只是用char数组替换struct中的CString声明,应该没问题。我有99%的肯定那是错误的,但是由于我没有VC ++,也没有使用MFC的经验,而且由于我看到过一些帖子说LPTSTR可以代替CString(What is `CString`?)使用,我开始怀疑我是否错了。

有人可以替我确认CString和LPTSTR不能作为函数的参数互换吗?如果您可以提供CString类定义的源,那将很有帮助,因此我可以将其发送给DLL的作者,并说明char数组的内存占用空间与CString类不同,并且可以不要将指针传递给用char数组定义的结构,然后将其视为一堆CString对象。

c++ dll c-strings
1个回答
0
投票

CStringCStringT类模板的别名。此类的对象确实最好不要传递给DLL。字符串类的字符类型可以为TCHAR(对于ANSI和Unicode字符串-请参见下面的说明)。 CString(和CStringT)的定义很可能在atlstr.h头文件中找到。

LPTSTR是指向字符序列的常规指针。数据类型(TCHAR*)取决于开发环境的设置:如果选择了“使用Unicode字符集”选项,则TCHAR数据类型将为wchar_tLPTSTR将为wchar_t* , 分别)。如果选择了“使用多字节字符集”,则TCHAR将被定义为charLPTSTR将是char*)。

因此CStringLPTSTR之间的互换性问题不是那么简单。它还取决于如何编写DLL。如果DLL的设计环境与主程序相同,则CStringLPTSTR实际上可以互换。

还请记住,CStirng是具有许多方法的类,而LPTSTR只是一个指针。

© www.soinside.com 2019 - 2024. All rights reserved.