我的问题几乎与this question相同,只是链接的问题涉及char *,而我'm using std::string in my code. Like the linked question, I' m也使用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:
// ...
};
这个由SWIG在C#中包含如下:
public class MyClass
{
public string get_value();
public void set_value(string value);
}
SWIG为我做了一切,除了它在调用MyClass期间没有对utf16进行utf16字符串转换 . 如果它们在ASCII中可表示,我的字符串会很好,但如果我尝试通过“set_value”和“get_value”在往返中传递带有非ascii字符的字符串,我最终会得到难以理解的字符 .
如何在C#中使用SWIG包装UTF-8编码的C字符串?注:我正在使用std :: string,而不是std :: wstring,而不是char * .
在SWIG sourceforge site上有一个部分解决方案,但它处理char *而不是std :: string,它使用(可配置的)固定长度缓冲区 .
1 回答
在链接的Code Project文章的David Jeske的帮助(阅读:天才!)中,我终于能够回答这个问题了 .
你需要在C#库中使用这个类(来自David Jeske的代码) .
然后,在Swig的“std_string.i”中,在第24行替换此行:
用这一行:
在第61行,替换此行:
用这一行:
瞧,一切正常 . 阅读链接的文章,以便更好地了解其工作原理 .