Andrew Hunt writes: > >> 1. ... Does an extension module have to be in this file to be built > >> (it would appear not)? > > > >No it has not to be in this file. Simple add an directory to 'ext' and > >create a MANIFEST file for that extension within its directory. Then > >it will be build automagically during the next make run. > > Then why does this file exist? Solely for static linking? Yep! ... > >Here an instance of class Data will be created. This instance is > >wrapping a pointer to an allocated dbmdata struct. Furthermore this > >Data instance will fake itself to be a DBM instance! So ruby thinks it > >is dealing with a DBM instance instead of a Data instance. > > So the extra C stuff you have allocated adds itself to the other > stuff (instance vars, etc.) in the DBM instance? Hmmm ... do I say 'yes' now, or do I say 'no'?!? :-/ Perhaps I have not properly understood the meaning of oyu question. So I will answer it as I have understood. If I answer the wrong question now, please let me know! If you use C to implement a new class (e.g. DBM) and you use Data_Wrap_Struct to wrap a C pointer to your data, then this C pointer, of course, will become part of your instance. But on Ruby level you have no possibility to directly access the data referred by the wrapped pointer -- means without help from methods of your extension, coded in C. If you now implement a new class on Ruby level inheriting from DBM like this: class MyDBM < DBM : end then your subclass is not able to access the data. But if your extension would use instance variables (methods 'rb_iv_get' and 'rb_iv_set') both DBM *and* MyDBM could access them properly. So in that sense I should say 'yes'. The data are added to ivars. Only you have no direct access to them via Ruby programs... ... > /\ndy \cle -- Clemens Hintze mailto: c.hintze / gmx.net