我正在尝试在ANSI编译器中使用DLL。其中一个DLL函数采用空指针。在随DLL提供的一些示例Windows代码中,传递给函数的结构被定义为具有三个CString实体。我已经告诉DLL的作者,他们不应该通过他们的DLL函数传递MFC类。他们告诉我只要用字符数组替换结构中的CString声明就可以了。我99%确定这是错误的,但由于我没有VC++,也没有任何使用MFC的经验,而且我看到一些帖子说LPTSTR可以用来代替CString (What is CString?),我开始怀疑我是不是错了。
有没有人能帮我确认一下,CString和LPTSTR不能作为函数的参数互换?如果您能提供定义CString类的源代码,这将很有帮助,因此我可以将其发送给DLL的作者,并解释字符数组的内存占用不同于CString类,并且您不能传递指向使用字符数组定义的结构的指针,然后将其视为一堆CString对象。
发布于 2020-03-16 14:57:58
CString是CStringT类模板的别名。这个类的对象最好不要传递给DLL。string类的字符类型可以是TCHAR (对于ANSI和Unicode字符串-参见下面的说明)。CString (和CStringT)的定义很可能在atlstr.h头文件中找到。
LPTSTR是指向字符序列的常规指针。数据类型(TCHAR*)取决于开发环境的设置:如果选择了"Use Unicode Character set“选项,则TCHAR数据类型将为wchar_t ( LPTSTR将分别为wchar_t* )。如果选择“使用多字节字符集”,TCHAR将被定义为char ( LPTSTR将被定义为char*)。
因此,关于CString和LPTSTR之间的互换性的问题并不那么简单。它还取决于DLL的编写方式。如果动态链接库的环境设置与主程序相同,那么CString和LPTSTR确实可以互换。
另外,请记住,CStirng是一个包含许多方法的类,而LPTSTR只是一个指针。
https://stackoverflow.com/questions/60700202
复制相似问题