windows - forsøger at få adgang til boost :: python-registreringsdatabasen fra et andet bibliotek

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en applikation, der bruger SWIG til at pakke sine funktioner og objekter. Jeg forsøger at interface med et bibliotek, der er pakket ind ved hjælp af boost :: python.


Min SWIG-indpakning gør:


\%typemap(typecheck, precedence=SWIG\_TYPECHECK\_POINTER) const OtherLib::Radish& {
    boost::python::extract<boost::shared\_ptr<OtherLib::Radish>> boost\_extracter($input);
    $1 = boost\_extracter.check();
}

\%typemap(in) const OtherLib::Radish& ( PyObject * obj = NULL, void *argp,  int res = 0) {
    boost::python::extract<boost::shared\_ptr<OtherLib::Radish>> boost\_extracter($input);
    if (!boost\_extracter.check()) {
        \%argument\_fail(SWIG\_TypeError, "$type", $symname, $argnum);
    }
    $1 = boost\_extracter().get();
}

// Translate boost::shared\_ptr<OtherLib::Radish> into a boost-wrapped Mol.
\%typemap(out) boost::shared\_ptr<OtherLib::Radish>
{
    auto info = boost::python::type\_id<boost::shared\_ptr<OtherLib::Radish>>();
    auto reg = boost::python::converter::registry::query(info);
    if (reg == nullptr || reg->m\_to\_python == nullptr) {
        SWIG\_exception(SWIG\_RuntimeError, "No boost conversion registered for boost::shared\_ptr<OtherLib::Radish>");
    } else {
        $result = reg->to\_python(&$1);
    }
}

// otherlib import is to ensure that the otherlib's Boost Python registry is
// loaded. if it is not loaded, we'd get the "No boost conversion registered.."
// exception above
\%pythoncode {
    import otherlib
}


Dette virker smukt på Linux og Darwin. Men i Windows får jeg fejl, der synes at indikere, at OtherLib :: Radish ikke er i boost-registreringsdatabasen, selvom jeg har importeret dette modul (på Python-niveauet).


Hvordan bruger jeg OtherLibs boost-registreringsdatabase på Windows?

Bedste reference