Экспортирование наследуемых методов класса в DLL
От: nik0dim Россия  
Дата: 07.07.08 12:23
Оценка:
Экспортирую класс CMainExportClass в статически подключаемую библиотеку "MyDll.dll".
Полученный "MyDll.lib" подключил к одному проекту, использующему некоторые методы класса CMainExportClass — всё замечательно, собралось, заработало. При попытке использования этого же lib-файла в другом проекте показало, что при экспорте в "MyDll.dll" не были экспортированы методы:
void CMyList<STwoItem>::SetFirst() и STwoItem * CMyList<STwoItem>::GetNext()
для класса CTwoList (см. ниже код).

#ifdef MY_EXPORT
#define DLL_CLASS __declspec(dllexport)
#else
#ifdef MY_IMPORT
#define DLL_CLASS __declspec(dllimport)
#pragma comment(lib, "MyDLL.lib")
#else
#define DLL_CLASS
#endif
#endif

/* шаблонный класс для построения классов COneList и CTwoList */
template <class CListItem>
class CMyList
{
    ...
    void SetFirst();
    CListItem* GetNext();
    ...
};

/* структура, с которой работает класс COneList */
struct SOneItem
{...};

/* структура, с которой работает класс CTwoList */
struct STwoItem
{...};

typedef class DLL_CLASS CMyList<SOneItem> COneList_tmpl;
typedef class DLL_CLASS CMyList<STwoItem> CTwoList_tmpl;

/* ни в одном из двух классов функции void SetFirst() и CListItem* GetNext() не переопределяются */
class DLL_CLASS COneList : public COneList_tmpl
{
    ...
    int Find(char* _str, char _mode)
    {
        /* в этой функции используются обе функции - и SetFirst(), и GetNext() */
    }
    ...
};

class DLL_CLASS CTwoList : public CTwoList_tmpl
{
    /* в классе ни одна из функций не вызывает ни SetFirst(), ни GetNext() */
    ...
};

/* основной экспортируемый класс */
class DLL_CLASS CMainExportClass
{
    ...
    COneList    one_object;
    CTwoList    two_object;
    ...
};


Для класса же COneList, который объявлен практически идентично, аналогичные методы экспортируются.
Выяснилось, что если сделать вызов этих методов из какого-либо явно определённого метода CTwoList, компилятор их экспортирует без вопросов. Решение решением, но корявенькое.
Как более лучше заставить компилятор экспортировать эти методы?
Компиляторы C++: MSVS 6.0 и 2005
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.