我希望标题足够好,可以帮助解释我遇到的问题。我认为一旦解决了这个问题,我的项目就会完成。请注意,两个项目都是在Unicode下编译的。
我正在使用CLI/C++
DLL,该DLL接受LPCTSTR
并返回const char*
。如果在逐步执行时将返回值存储在项目中的const char*
中,则可以看到返回值就是我希望返回的值。
现在,如果我执行以下操作:
LPCTSTR strValue = L"test";
const char* Return = MethodCall(strValue);
LPCTSTR Final = CString(Return);
返回值将等于“Xmkk = Asmks”(这应该是)。此方法加密字符串。问题是当我执行
CString
时,Final将等于“ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ㹙癞鞮᠀诸二⤐²”。如何在不更改数据的情况下将onst char*
转换为LPCTSTR
”谢谢。
最佳答案
销毁CString(Return)之后(此情况发生在“其构造后的下一行”)。“最终”指针指向已分配的内存块(内部CString(Return)缓冲区)。在这一点上,它指向的内存内容是不确定的,而取消引用它的行为是不确定的。
为了安全地使用指向内部缓冲区的指针,您应该确保拥有缓冲区的CString只要指针处于 Activity 状态。LPCTSTR strValue = L"test";const char* Return = MethodCall(strValue);LPCTSTR PointerToBuffer= 0;{ CString ReturnStringObj(Return); PointerToBuffer = ReturnStringObj; // Can safelly use your pointer here}// Here ReturnStringObj is killed and pointer dereferencing is invalid here
关于c++ - 为什么MFC C++ CString(const char *)完全更改const char *值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9791661/