У меня есть следующая функция c ++, которая устанавливает целое число, используя строку.
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
extern "C" {
int a() {
int number;
string value("100");
std::istringstream strm(value);
strm >> number;
if (strm.fail()) {
cout << "Ouch!" << endl;
}
else {
cout << "Number set to:" << number << endl;
};
return (int)strm.bad();
}
}
int main(int argc, char **argv)
{
a();
}
Если я скомпилирую это как программу, она будет работать.
$ g++ ./streamtest.cc -o streamtest;./streamtest
Number set to:100
Но если я вызываю ту же функцию из ctypes, она не устанавливает целое число, и "strm" остается в "плохом" состоянии.
$ g++ -shared streamtest.cc -o libstreamtest.so
$ python -c "import ctypes;a = ctypes.CDLL('libstreamtest.so').a();print 'Got [%s] from a()' %a"
Ouch!
Got [1] from a()
Это меня озадачило. Как я могу заставить эту функцию работать под ctypes?