[C++-sig] Exposing classes
Pierre Barbier de Reuille
pierre.barbier at cirad.fr
Wed Jul 27 16:14:50 CEST 2005
Ok, the problem is not about how you export your C++ functions, it's how
you import the module !
When you use the Python "import" statement, Python will look for a file
! And that you don't want as your module is inside your program (and not
as a separate file). So you need to use the C API of Python to import
it. The function is called PyImport_AppendInittab.
Another possibility is to create a DLL with the Boost.Python code (and
not the actual C++ code ...) so there is a hello.dll or hell.pyd file to
load when you use the import statement. However, I really don't know how
well it will work on Windows !
Pierre
Ira Holtzer a écrit :
> OK, I'm new at this so please bear with me.
>
> First off, I'm using boost::python so what low level functions do you mean
> (can you give me one name so I know where to start looking)?
>
> Second, what I did is the following:
> Created an exe file (SimplePython.exe ) what has a standard greet() function
> and the boost::python declaration:
> BOOST_PYTHON_MODULE(hello)
> {
> def("greet", greet);
> }
>
> I run the exe which feeds the interpreter with the script (via
> PyRun_String):
> import hello
> print hello.greet()
>
> To which the interpreter returns an exception saying "ImportError: No module
> named hello.
>
> Can this be a path problem, do I somehow need to specify a dll/exe that has
> c++ exported symbols?
>
> Thanks,
> Ira
>
> ----- Original Message -----
> From: "Pierre Barbier de Reuille" <pierre.barbier at cirad.fr>
> Newsgroups: gmane.comp.python.c++
> Sent: Wednesday, July 27, 2005 10:02 AM
> Subject: Re: Exposing classes
>
>
> Well, don't know for windows, but for Linux if your symbols are defined
> inside your executable file, it works well ! Even your whole module can
> be defined in your executable file. You just have to initialise it from
> the C API with the low level functions (i.e. the ones who won't try to
> look for a file named after your module name ...). Also, once your
> module is loaded, every other "normal" import will just work !
>
> Pierre
>
> Ira a écrit :
>
>>A question on basics...
>>
>>Do all my exposed C++ symbols need to be in .dll format (win32 of course)?
>>
>>What I mean is, can I have an exe running a python intrpreter where
>
> exposed
>
>>symbols are compiled *inside* the exe and somehow be able to access them
>>from the python scripts?
>>
>>How would I import the modules in such a case?
>>
>>Thanks,
>>Ira
>>
>>
>>
>>_______________________________________________
>>C++-sig mailing list
>>C++-sig at python.org
>>http://mail.python.org/mailman/listinfo/c++-sig
>>
>
>
--
Pierre Barbier de Reuille
INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France
tel : (33) 4 67 61 65 77 fax : (33) 4 67 61 56 68
More information about the Cplusplus-sig
mailing list