【问题标题】:Are MFC CString and LPTSTR interchangeable?MFC CString 和 LPTSTR 可以互换吗?
【发布时间】:2020-06-27 05:23:58
【问题描述】:

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

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

【问题讨论】:

    标签: c++ dll c-strings


    【解决方案1】:

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

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

    所以关于CStringLPTSTR 之间可互换性的问题并不是那么简单。它还取决于 DLL 的编写方式。如果 DLL 的设计环境设置与主程序相同,那么CStringLPTSTR 真的可以互换。

    另外,请记住CStirng 是一个包含许多方法的类,而LPTSTR 只是一个指针。

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 2014-10-28
      • 2011-12-01
      • 1970-01-01
      • 2012-12-29
      • 2017-12-08
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多