THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 13/09/2004 at 00:48, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 8.207
Platform: Windows ;
Language(s) : C++ ;
---------
The origin of my problem is a bit more c++ than sdk, but I ask it here, because it can help alot when creating class libraries.
For a class library I have to create an interface, using a C4DLibrary derived struct to save the member function pointers, and define the internal class. I want to write kind of module handler, which defines the interface of my modules, takes care for the registration of modules and so on. The modules itself should be the internal part of a class library, derived from a class defined in the module handler.
This leads to a problem: the module handler defines the interface, like
class iImportModule {
public:
void test();
static iImportModule* Alloc( );
static void Free( iImportModule*& p );
};
class ImportModule {
public:
void test();
static ImportModule* Alloc();
static void Free( ImportModule*& p );
};
struct LIB_ImportModuleLib : public C4DLibrary {
void ( iImportModule::*test )( );
iImportModule* ( *Alloc )( );
void ( *Free )( iImportModule*& p );
};
And in my modules I want to derive the module class:
class testmodule : public iImportModule
So the modules have the functions called by the module handler, and can have internal functions/variables to do theire job.
But when registering I have to fill out the library struct. The problem is, that I want to define the library struct in the module handler, this interface should not change. But there I only know the parent class of the modules, but not the module class itself:
In the module I have to do:
LIB_ImportModuleLib vlib;
vlib.test = &testmodule::test;
which will run into a problem: the cast cannot be done. Anyone has a idea, how to do the cast ( basically it should just be a 32bit adress? ), or another way how to solve it?
I could do my modules as function libs, did that for another task, works fine, but here I want to have class libs. Maybe also possible would be to redefine the library struct in the module, be sure that its memory compatible with the one from the module, and register this one...but thats the same interface defined at two positions, I want to avoid this.