|
Boost : |
From: Dirk Gregorius (dirk_at_[hidden])
Date: 2004-12-08 10:31:33
Hi,
is it possible to return a shared_ptr to an interface from a dl?. I
thought of the following what unfortunately doesn't work:
// Interface.h - exe project
class Interface
{
public:
vitrtual void f( void ) = 0;
virtual void g( void ) = 0;
protected:
~Interface( void ) {}
}
typedef shared_ptr<Interface> InterfacePtr;
InterfacePtr Create( void )
{
// Load a special create function from the dll
//....
return DLLCreate();
}
// InterfaceImpl.h - dll project
#include Interface
class InterfaceImpl : public Interface
{
public:
void f( void ) { /* ... */ };
void g( void ) { /* ... */ };
private:
// No copy operations
}
extern "C" InterfacePtr DLLCreate( void )
{
return InterfacePtr( new InterfaceImpl );
}
At the moment this code doesn't compile because VS7.1 complains that it
a function with extern "C" linkage can't return a shared_ptr<Interface>
instance. How could I implement the desired behavior?
Some other related questions regarding this topic:
1.) I link to the multithreaded C run-time dll - is this allowed? I read
in an older post that only static CRT linking is allowed.
2.) Does the above code - loading the factory from the DLL as well and
(hopefully) constructing the instance there - solve the boundary
problems? I read some articles regarding this issue, but to be honest I
haven't completly understood the problems that may occure in this case
so far.
Any help is greatly appreiciated..
-Dirk
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk