I suggest (a) renaming as test.test is confusing, eg call the file/module test_file, and the class test_class (b) I think from your previous post that test.test() simply calls the constructor for class test, and this constructor is defined in python, returning an object not a pointer, so perhaps try extract<Component> not extract<Component*>
Best Lewis Bayforest Technologies Limited 48 Dover St, Mayfair London W1S 4FF work1: +44 203 968 5167 email: lewis.ev...@bayforest.ai web: https://bayforest.ai/ On Thu, May 14, 2020 at 5:00 PM <cplusplus-sig-requ...@python.org> wrote: > Send Cplusplus-sig mailing list submissions to > cplusplus-sig@python.org > > To subscribe or unsubscribe via the World Wide Web, visit > https://mail.python.org/mailman/listinfo/cplusplus-sig > or, via email, send a message with subject or body 'help' to > cplusplus-sig-requ...@python.org > > You can reach the person managing the list at > cplusplus-sig-ow...@python.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Cplusplus-sig digest..." > > > Today's Topics: > > 1. Re: Cplusplus-sig Digest, Vol 125, Issue 3 (Carlos Duran) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Wed, 13 May 2020 17:50:16 +0200 > From: Carlos Duran <carlos_w...@zohomail.eu> > To: "cplusplus-sig" <cplusplus-sig@python.org> > Subject: Re: [C++-sig] Cplusplus-sig Digest, Vol 125, Issue 3 > Message-ID: > <1720ebab660.12aad1dbc94224.6884088036261319...@zohomail.eu> > Content-Type: text/plain; charset="utf-8" > > Hello again, > > > > I rewrite part of the code, but I didn't find my error. > > My new code is: > > cat ../src/DemiWu.cpp > > #include <boost/python.hpp> > > > > #include <DemiComponent.hpp> > > #include <DemiWu.hpp> > > #include <iostream> > > #include <string> > > > > using namespace boost::python; > > using namespace DemiWu; > > > > #if PY_MAJOR_VERSION >= 3 > > #?? define INIT_MODULE PyInit_DemiWu > > ??? extern "C" PyObject* INIT_MODULE(); > > #else > > #?? define INIT_MODULE initDemiwu > > ??? extern "C" void INIT_MODULE(); > > #endif > > > > int main() > > { > > ????? PyImport_AppendInittab((char*)"DemiWu", INIT_MODULE); > > ????? Py_Initialize(); > > ????? object main = import("__main__"); > > ????? object global = main.attr("__dict__"); > > ????? PySys_SetPath(L"."); > > ????? global["test"] = import("test"); // How can I check the import? > > > > ????? object funcObj = global["test"].attr("test"); > > ????? std::cout << std::boolalpha; > > ????? std::cout << funcObj.is_none() << "\n"; // funcObj.is_none() == false > > ????? object resultObj = funcObj(); > > ????? std::cout << resultObj.is_none() << "\n"; // resultObj.is_none() == > false > > > > ????? // I suppose that in "real" code I need to check every time I use > attr method. > > ????? extract<std::string> > exclass(funcObj.attr("__class__").attr("__name__")); > > ????? if(exclass.check()) > > ????? ????? std::cout << "test.test.__class__.__name__: " << exclass() << > "\n"; // exclass() == "class" > > ????? extract<std::string> > exclass2(resultObj.attr("__class__").attr("__name__")); > > ????? if(exclass2.check()) > > ????? ????? std::cout << "test.test().__class__.__name__: " << exclass2() > << "\n"; // exclass2() == "test" > > ????? extract<std::string> > exbase(funcObj.attr("__base__").attr("__name__")); > > ????? if(exbase.check()) > > ????? ????? std::cout << "test.test.__base__.__name__: " << exbase() << > "\n"; // exbase() == "Component" > > ????? // It seems that resultObj is correct, I think that I am using > extract<> function wrong. > > ????? extract<Component*> ex(resultObj); > > ????? if(ex.check()){ > > ????? ????? Component * const b=ex(); > > ????? ????? b->on_create(); ? > > ????? ????? std::cout << "SUCCESS\n"; > > ????? ????? return 0; > > ????? } else { > > ????? ????? std::cout << "FAIL\n"; // And again the program jumps here. > > ????? ????? return 1; > > ????? } > > } > > > > And the execution: > > ./DemiWu > > false > > false > > test.test.__class__.__name__: class > > test.test().__class__.__name__: test > > test.test.__base__.__name__: Component > > FAIL > > > > Thank you for your response > > > > Carlos > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://mail.python.org/pipermail/cplusplus-sig/attachments/20200513/e8d19d13/attachment-0001.html > > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > https://mail.python.org/mailman/listinfo/cplusplus-sig > > > ------------------------------ > > End of Cplusplus-sig Digest, Vol 125, Issue 5 > ********************************************* > -- Bayforest Capital Limited ( Bayforest®) is an Appointed Representative of G10 Capital Limited. G10 Capital Limited is authorised and regulated by the Financial Conduct Authority, registration number 648953. The information contained in this transmission may contain privileged and confidential information. It is intended only for the use of the person(s) named above. If you are not the intended recipient, you are hereby notified that any review, dissemination, distribution or duplication of this communication is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Bayforest Capital Limited and Bayforest Technologies Limited. If you are not the intended recipient, please contact the sender by replying to this e-mail and destroy all copies of this e-mail (and any attachment(s)) from your system. To reply to our e-mail administrator directly, please send an e-mail to ad...@bayforest.ai <mailto:ad...@bayforest.ai>.
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig