$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Anton Gluck (gluc_at_[hidden])
Date: 2000-10-05 22:59:14
Dave,
> > The workaround for overloaded methods will do for now, but overloaded
> > constructors are a prominent feature of our code too. Well, let's wait and
> > see.
>
> Honestly, I was just reviewing the code for handling these last night. You
> will probably have a solution today. :-)
Excellent! (Although today has already turned into tomorrow :-)
> I can assure you, it's true! A template itself generates no code unless it
> is instantiated roughly meaning "is used with some definite set of
> arguments". Sometimes the arguments are "deduced" based on function argument
> matching, or by being specified from within another template, but in the end
> it all comes down to types specified by the user.
Not to worry - I trust you completely! I've also confirmed that all the
templates that are being used in our library are instances of standard
library templates.
> > So now that I have the demo module (from vc6_prj) I tried test_exclass.py
> > again. But now I get this error: 'python.exe - Application Error. The
> > instruction at "[some address]" referenced memory at "[some address]". The
> > memory could not be "written".' The MSVC debugger tells me that this here
> > is the problem: 'Unhandled exception in python.exe: [some address]: access
> > violation'. Any idea what the problem here is?
>
> probably that you need to use the --broken-auto-ptr option when you run the
Yes, that fixed it.
> test. You can find an explanation for this in test_extclass.py. BTW, also
> run the test with the -v option or it will be *really* boring when
> everything works ;)
Very true; plus, I wouldn't have wanted to miss the notification that I
(yes, I take this personally) have now passed 70 tests :-)
> > About your example1.cpp file: I've been able to compile it alright, but
> > I'm getting a lot of linker errors like this: 'example2.obj : error
> > LNK2001: unresolved external symbol "void __cdecl
> > py::handle_exception(void)" (?handle_exception_at_py@@YAXXZ)'. I've checked
> > for the /Tp option and the presence of extern "C" that are mentioned in
> > the MSDN library, but these seem ok. Any suggestions here?
>
> You need to compile the .cpp source files into your .DLL. In particular, the
> one called py.cpp is missing in this case.
True again. Perhaps it's useful for future reference that I have (it is
necessary to?) included these py_cpp source files (I went with the
non-debug versions; more on this below):
extclass.cpp
functions.cpp
init_function.cpp
module.cpp
newtypes.cpp
objects.cpp
py.cpp
subclass.cpp
Another tip for those who stick with MSVC 6.0's standard library (which
has a broken string module): In the example, change "#include
<cstring>" to "#include <string.h>" and then delete the std:: qualifier
before strlen(..).
I would also suggest here that you change the sample code from your web
site to the one you sent me (example1.cpp) since I could not get the code
from the web to compile unless I basically turned it into the code you
sent me.
That said, I want to mention that I got these three warnings during
compilation:
d:\py_cpp\extclass.h(71) : warning C4541: 'dynamic_cast' used on
polymorphic type 'class py::InstanceHolderBase' with /GR-; unpredictable
behavior may result
d:\py_cpp\extclass.h(64) : while compiling class-template member
function 'class hello::world *__cdecl
py::PyExtensionClassConvertersBase<class hello::world>::from_python(struct
_object *,struct py::Type<class hello::world *>)' extclass.cpp
d:\py_cpp\extclass.cpp(32) : warning C4541: 'typeid' used on polymorphic
type 'class py::InstanceHolderBase' with /GR-; unpredictable behavior may
result
d:\py_cpp\extclass.cpp(32) : warning C4541: 'typeid' used on polymorphic
type 'class py::InstanceHolderBase' with /GR-; unpredictable behavior may
result
I could then import the resulting library into Python, but didn't get much
further. I could do "hi_world = hello.world(3)", but could not call any
method of hi_world. This is what happens if I try "hi_world.get()":
"Debug Assertion Failed! Program: D:\python\python.exe File: dbgheap.c
Line: 1017 Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) bla bla".
And then Python gives a "RuntimeError: unidentifiable C++
exception". Originally I thought this might be because I used the
non-debug source files, but when I rebuilt the example with the .._d files
I had the same problem. Any suggestions?
Another detail here because I just tried this: Before I had been building
debug versions, and so I now tried a release build. I don't get the above
failed assert any more, but I do get a
Traceback (innermost last):
File "<stdin>", line 1, in ?
RuntimeError: Access violation - no RTTI data!
message (when I try hi_world.get() and also hello.length(hi_world)).
Yet another detail: When I quit Python after this, I get this message:
Runtime Error!
Program: D:\python\python.exe
R6025
- pure virtual funtion call
I'm sorry for having all these questions, but perhaps it helps you to iron
out py_cpp for its release. Novices like myself would surely love to have
an easy example with good instructions...
Many thanks once again,
Toni