[C++-sig] strange sideeffect or bug of boost.python
yakumoklesk at yahoo.es
yakumoklesk at yahoo.es
Wed Oct 29 13:31:01 CET 2003
Something like this happened to me. Maybe youo are compiling a Debug version of your
application. As boost python makes a wrap include of "python.h" in order to avoid
compilin with the python_d debug library, you are compiling a debug version without a
debug python library. To avoid this, in your precompiler definitions in the project in
visual C just define: BOOST_DEBUG_PYTHON. With this definition you can include the
necessary bost/python.hpp include file in order to work with bost::python namespace
objects.
I hope this helped you.
David.
On 29 Oct 2003 at 12:33, Lutz Paelike wrote:
> Hi,
>
> i encountered a strange thing when i wanted to create a dictionary object from c++.
> The error is after creating the dict with no errors (result!=NULL) a simple PyDict_Check fails with no reason.
> I tracked this down through the Python Sources and extracted the essential source of PyDict_Check and inserted
> it into the example code below. In the Debugger i see that the ob_type of the new object is somehow screwed up.
> And now the strange thing: This error goes away and the code works like expected if i remove the boost include.
>
> Am I missing something or is this a strange side effect ?
>
> I'm using Visual Studio 6 SP5 and a recent boost cvs checkout (about 1-2 weeks old)
>
> Thanks for your help,
>
> Lutz
>
> Here is the code:
>
> ///////////////////////////snip//////////////////////////////////////
> #include <boost/python.hpp> // comment this out to make it work
>
> #include <string>
> #include <iostream>
> #include <fstream>
> #include <exception>
> #include <stdexcept>
>
> #include <Python.h>
> #include <compile.h>
> #include <eval.h>
> #include <dictobject.h>
>
>
> int main()
> {
> Py_Initialize();
>
> PyObject *the_dict = PyDict_New ();
>
> if (NULL!=the_dict){
>
> Py_INCREF(the_dict);
>
> _typeobject * dt = &PyDict_Type;
>
> // PyDict_Check does this. Why isn't this working here?
> bool isT = ((the_dict)->ob_type == (&PyDict_Type));
> bool isST = PyType_IsSubtype((the_dict)->ob_type, (&PyDict_Type));
>
> if (isT) printf("the_dict is of type PyDict_Type\n");
> else printf("the_dict is not of type PyDict_Type! Boost.Python Bug?\n");
>
> if (isST) printf("the_dict is of subtype PyDict_Type\n");
> else printf("the_dict is not of subtype PyDict_Type! Boost.Python Bug?\n");
>
> Py_DECREF(the_dict);
>
> } else printf("Error creating new dict\n");
>
> Py_Finalize();
>
> return 0;
> }
>
> ///////////////////////////snip//////////////////////////////////////
>
>
>
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
More information about the Cplusplus-sig
mailing list