如何从字符串转换为LPWSTR
String^ str= "hello world";
LPWSTR apppath= (LPWSTR)(Marshal::StringToHGlobalAnsi(str).ToPointer());
但它不起作用。转换后:
答案 0 :(得分:0)
你试图读取单字节字符(这是Marshal::StringToHGlobalAnsi
返回的内容)作为宽字符(这是LPWSTR
类型指向的内容),并且你得到了内存中的任何内容解释为宽字符串。
您需要编组适当的类型,并且需要了解结果的生命周期。这是一个示例程序,显示了一种方法,从marshal_context::marshal_as中的MSDN示例进行了修改:
// compile with: /clr
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <msclr\marshal.h>
using namespace System;
using namespace msclr::interop;
int main() {
marshal_context^ context = gcnew marshal_context();
String^ str = "hello world";
LPWSTR apppath = const_cast<wchar_t*>(context->marshal_as<const wchar_t*>(str));
wprintf(L"%s\n", apppath);
delete context;
return 0;
}
请注意,删除apppath
后,对context
的引用可能是假的。