将引用从 Python 传递给用 swig 包装的 c++ 函数以获得 return 值
Passing reference from Python to c++ function wrapped with swig for return value
免责声明,我是一个痛饮和python菜鸟
我有自己的 C++ 库,我正在包装它以便在 python 中使用 swig。
我的c++class是这样的:
public MyCppClass()
{
public:
void MyFunction(char* outCharPtr, string& outStr, int& outInt, long& outLong)
{
outCharPtr = new char[2];
outCharPtr[0] = "o";
outCharPtr[1] = "k";
outStr = "This is a result";
outInt = 1;
outLong = (long)12345;
}
}
现在我用 swig 包装这个 class 并说这个模块叫做 MyClass。
我想在 python 中实现的是以下代码(或者说伪代码,因为如果它是代码,它就会工作)和输出:
import module MyClass
from MyClass import MyCppClass
obj = MyCppClass();
outCharPtr = "";
outStr = "";
outInt = 0;
outLong = 0;
obj.MyFunction(outCharPtr, outStr, outInt, outLong);
print(outCharPtr);
print(outStr);
print(outInt);
print(outLong);
我想要的输出是:
>>>Ok
>>>This is a result
>>>1
>>>12345
我正在使用 python 3.4
如果这是基本的东西,我真的很抱歉,但我已经花了大约 8 个小时来解决这个问题,但什么也想不出来。
任何帮助将不胜感激。
谢谢。
这是一种方法。我对您的非工作示例进行了一些修改:
example.i
%module example
%include <std_string.i>
%include <cstring.i>
%cstring_bounded_output(char* outCharPtr, 256)
%apply std::string& OUTPUT {std::string& outStr};
%apply int& OUTPUT {int& outInt};
%apply long& OUTPUT {long& outLong};
%inline %{
class MyCppClass
{
public:
void MyFunction(char* outCharPtr, std::string& outStr, int& outInt, long& outLong)
{
outCharPtr[0] = 'o';
outCharPtr[1] = 'k';
outCharPtr[2] = '[=10=]';
outStr = "This is a result";
outInt = 1;
outLong = (long)12345;
}
};
%}
使用示例:
>>> import example
>>> c=example.MyCppClass()
>>> c.MyFunction()
['ok', 'This is a result', 1, 12345]
免责声明,我是一个痛饮和python菜鸟
我有自己的 C++ 库,我正在包装它以便在 python 中使用 swig。
我的c++class是这样的:
public MyCppClass()
{
public:
void MyFunction(char* outCharPtr, string& outStr, int& outInt, long& outLong)
{
outCharPtr = new char[2];
outCharPtr[0] = "o";
outCharPtr[1] = "k";
outStr = "This is a result";
outInt = 1;
outLong = (long)12345;
}
}
现在我用 swig 包装这个 class 并说这个模块叫做 MyClass。
我想在 python 中实现的是以下代码(或者说伪代码,因为如果它是代码,它就会工作)和输出:
import module MyClass
from MyClass import MyCppClass
obj = MyCppClass();
outCharPtr = "";
outStr = "";
outInt = 0;
outLong = 0;
obj.MyFunction(outCharPtr, outStr, outInt, outLong);
print(outCharPtr);
print(outStr);
print(outInt);
print(outLong);
我想要的输出是:
>>>Ok
>>>This is a result
>>>1
>>>12345
我正在使用 python 3.4
如果这是基本的东西,我真的很抱歉,但我已经花了大约 8 个小时来解决这个问题,但什么也想不出来。
任何帮助将不胜感激。
谢谢。
这是一种方法。我对您的非工作示例进行了一些修改:
example.i
%module example
%include <std_string.i>
%include <cstring.i>
%cstring_bounded_output(char* outCharPtr, 256)
%apply std::string& OUTPUT {std::string& outStr};
%apply int& OUTPUT {int& outInt};
%apply long& OUTPUT {long& outLong};
%inline %{
class MyCppClass
{
public:
void MyFunction(char* outCharPtr, std::string& outStr, int& outInt, long& outLong)
{
outCharPtr[0] = 'o';
outCharPtr[1] = 'k';
outCharPtr[2] = '[=10=]';
outStr = "This is a result";
outInt = 1;
outLong = (long)12345;
}
};
%}
使用示例:
>>> import example
>>> c=example.MyCppClass()
>>> c.MyFunction()
['ok', 'This is a result', 1, 12345]