From: William S F. <ws...@fu...> - 2011-07-12 06:18:06
|
On 23/06/11 13:44, Yu QIN wrote: > > Dear all > > I want to convert a program in C++ into Java via SWIG, but there is a > problem with the virtual default destructor. > > //////////////////////example.h///////////////////// > _________________________________________________________________________ > #ifdef EXAMPLE_SDK > #define EXAMPLE_API __declspec(dllexport) > #else > #define EXAMPLE_API __declspec(dllimport) > #endif > > class MORPHO_API EXAMPLE_Device > { > public: > int OpenDevice ( > int number > ); > > int CloseDevice (void); > virtual ~EXAMPLE_Device (); > }; > _____________________________________________________________________________ > and in the file .i > ///////////////example.i///////////////////// > ________________________________________________________________________ > %module Example > %include<windows.i> //I have to add it in order to convert > __declspec(dllimport) > > %{ > #include "example.h"; > %} > %include "example.h"; > ______________________________________________________________________________ > > When I generated the wrapper, there is an error about the virtual default > destructor > no resolved extern symbol "__declespec(dllimport) const EXAMPLE_Device :: " > ......... in the function > "public: virtual__thiscall EXAMPLE_Device::~EXAMPLE_Device(void)" > > If I remove virtual ~EXAMPLE_Device ();, the program will work > or if I remove MORPHO_API and keep virtual ~EXAMPLE_Device ();, the program > will also work > > Does someone have an idea how to resolve this kind of problem? > (maybe I have to add some specified options in the file .i??) > The author of EXAMPLE_Device must provide a body for the destructor which you must link against. This is extremely basic C++ knowledge you need to master. William |