VC.net字符串到LPWSTR

时间:2014-02-26 11:59:57

标签: visual-c++

如何从字符串转换为LPWSTR

String^ str= "hello world";
LPWSTR apppath= (LPWSTR)(Marshal::StringToHGlobalAnsi(str).ToPointer());

但它不起作用。转换后: enter image description here

1 个答案:

答案 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的引用可能是假的。