C++ 将LPTSTR转换为System::String^以供查看

C++ 将LPTSTR转换为System::String^以供查看,c++,string,visual-c++,type-conversion,lptstr,C++,String,Visual C++,Type Conversion,Lptstr,我需要将LPTSTR转换为字符串^,以便能够通过MessageBox查看它 LPTSTR szResult; DWORD language = GetPrivateProfileString(L"LANGUAGE", L"LANGUAGE", L"", szResult, 255, L"\\file.ini"); System::String^ str_buffed = msclr::interop::marshal_as<System::String^>(szResult); Me

我需要将LPTSTR转换为字符串^,以便能够通过MessageBox查看它

LPTSTR szResult;
DWORD language = GetPrivateProfileString(L"LANGUAGE", L"LANGUAGE", L"", szResult, 255, L"\\file.ini");
System::String^ str_buffed = msclr::interop::marshal_as<System::String^>(szResult);
MessageBox::Show("CLR MessageBox", str_buffed, MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
我做得好吗?因为我得到了en异常:System.AccessViolationException-试图读取受保护的内存


如何以其他方式读取ini文件并将其转换为字符串^?

szResult应定义为类似于TCHAR szResult[501]的内容;发生访问冲突是因为对于出站参数,您正在传递指向未分配内存位置的指针。AVE从来都不是好方法。明显的错误是szResult声明,它必须是TCHAR[],不能是LPTSTR。在犯这个错误之前,使用255应该会让你感到不舒服。至于解释:LPTSTR是一个指针,在名称中键入P。它不分配缓冲内存。它没有初始化,所以它可以指向任何地方,最有可能是null ptr。你的应用程序说它正在使用szResult中的地址的几率不到百万分之一。如果是这样的话,您希望在该内存位置有其他东西,而不是GetPrivateProfileString放在那里的东西,祝您好运找到该bug。