4

リンクされた質問が char* を扱っていることを除いて、私の質問はthis questionとほぼ同じですが、コードで std::string を使用しています。リンクされた質問のように、ターゲット言語として C# も使用しています。

私はC++で書かれたクラスを持っています:

class MyClass
{
public:
    const std::string get_value() const; // returns utf8-string
    void set_value(const std::string &value); // sets utf8-string
private:
    // ...
};

そして、これは C# の SWIG によって次のようにラップされます。

public class MyClass
{
    public string get_value();
    public void set_value(string value);
}

SWIG は、MyClass の呼び出し中に utf8 から utf16 への文字列変換を行わないことを除いて、私の代わりにすべてを行います。私の文字列は ASCII で表現できる場合はうまくいきますが、「set_value」と「get_value」の往復で非 ASCII 文字を含む文字列を渡そうとすると、理解できない文字になってしまいます。

C#でSWIGがUTF-8でエンコードされたC++文字列をラップするようにするにはどうすればよいですか? nb std::wstring ではなく、char* ではなく、std::string を使用しています。

SWIG sourceforge サイトには部分的な解決策がありますが、std::string ではなく char* を処理し、(構成可能な) 固定長バッファーを使用します。

4

1 に答える 1