c#:如何将c#string转换为c ++ wstring,反之亦然

时间:2012-05-16 12:35:46

标签: string visual-c++ c#-4.0 wstring widestring

c#c​​ode-

string s="おはよう";

我想将s发送到c ++ dll,如wstring ..
如何在c#中将字符串转换为wstring?

1 个答案:

答案 0 :(得分:4)

std::wstring是一个C ++对象,由C ++运行时分配,具有依赖于实现的内部格式。您可能能够弄清楚如何在C#程序中创建其中一个并将其传递给非托管C ++代码,但这样做会有些困难并且充满危险。由于std::wstring的内部结构依赖于实现,因此对C ++编译器或运行时库的任何更改都会破坏您的解决方案。

您尝试做的通常是通过在C ++中编写接口层来获取LPTStr参数,将其转换为std::wstring,然后调用您想要的C ++函数来完成呼叫。也就是说,如果要调用的函数声明为:

int Foo(std::wstring p);

你会编写一个接口函数:

int FooCaller(LPTSTR p)
{
    std::wstring str = p;
    return Foo(str);
}

你从C#程序中调用FooCaller

简而言之,C#无法创建并传递std::wstring,因此您使用翻译层。