我有一個C++類,能夠以正常的ASCII或寬格式輸出字符串。我想以Python的形式獲取輸出。我正在使用SWIG(3.0.4版)並閱讀了SWIG文檔。我使用下面的類型映射,從一個標準的C字符串轉換爲我的C++類:使用SWIG for Python在Linux中轉換字符串
%typemap(out) myNamespace::MyString &
{
$result = PyString_FromString(const char *v);
}
能正常工作在Windows與VS2010的編譯器,但它不是在Linux的完全合作。當我編譯Linux下的包文件時,我收到以下錯誤:
error: cannot convert ‘std::string*’ to ‘myNamespace::MyString*’ in assignment
所以,我想增加一個額外的類型映射到Linux接口文件像這樣:
%typemap(in) myNamespace::MyString*
{
$result = PyString_FromString(std::string*);
}
但我仍然得到同樣的錯誤。如果我手動進入包裝代碼並修復分配,如下所示:
arg2 = (myNamespace::MyString*) ptr;
然後代碼編譯就好了。我不明白爲什麼我的其他類型圖不起作用。任何想法或解決方案將不勝感激。提前致謝。
@Devian - 非常感謝您的代碼示例,它工作良好l在我的32位和64位版本中。其他兩種構建類型是32位和64位寬字符構建。對於寬字符版本,我需要在SWIG的接口文件中包含std_wiostream.i和std_wsstream.i文件。當我包含這些文件時,我會在包裝文件中包含無關的SWIG語句。這些語句的格式如下:if(SWIG_IsNewObj(res2))delete arg2;這些語句會導致編譯器錯誤,因爲變量res2不存在。任何想法爲什麼這些行被插入到包裝文件中? –