3

c#代码-

字符串 s="おはよう";

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

4

1 回答 1

4

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

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

int Foo(std::wstring p);

您将编写一个接口函数:

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

FooCaller从你的 C# 程序中调用。

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

于 2012-05-17T14:19:44.843 回答