2010-11-06 23 views
0

Désolé pour mon mauvais anglais. J'ai 2 projets. Le projet 1 est une DLL MFC qui contient la classe CMyContainer, classe CEmployee. Le projet 2 est mon projet principal. Dans le projet 2, j'ai créé une instance de CMyContainer de type CEmployee. Maintenant, je veux trier le conteneur, mais je suis une erreurDéfinir la méthode de tri (qui utilise std :: sort pour le tri) d'une classe modèle dans dll et l'appeler depuis un autre projet

« error LNK2019: unresolved external symbol "bool __cdecl MyComparer(class CEmployee *,class CEmployee *)" ([email protected]@[email protected]@[email protected]) referenced in function "public: void __thiscall CMyContainer<class CEmployee>::sortContainer(void)" ([email protected][email protected]@@@@QAEXXZ) »

Comment puis-je résoudre ce problème?

// fichier MyContainer.h dans le projet 1

#include <vector> 

template <class T> 
class _declspec(dllexport) CMyContainer 
{ 
public: 
    CMyContainer(void); 
    ~CMyContainer(void); 
     ... 

    void sortContainer(); 
private: 
    std::vector<T*> items; 
    typename std::vector<T*>::iterator it; 
}; 
template <class T> void CMyContainer<T>::sortContainer() 
{ 
    typedef bool (*comparer_t)(T*,T*); 
    comparer_t cmp = &MyComparer; 
    std::sort(items.begin(), items.end(), cmp); 
} 


//File Employee.h in project 1 
#include "MyContainer.h" 


class _declspec(dllexport) CEmployee 
{ 
public: 
    CEmployee(void); 
    ~CEmployee(void); 
     void setEmployeeCode(CString); 
     CString getEmployeeCode(); 
     friend bool MyComparer(CEmployee*, CEmployee*); 
private: 
     CString m_szEmployeeCode; 
} 

//File Employee.cpp in project 1 
void CEmployee::setEmployeeCode(CString val){ 
    m_szEmployeeCode= val; 
} 


CString CEmployee::getEmployeeCode(){ 

    return m_szEmployeeCode; 
} 
bool MyComparer(CEmployee*pEmp1, CEmployee*pEmp2) 
{ 
    return (pEmp1->getEmployeeCode().Compare(pEmp2->getEmployeeCode())<0); 
} 
//File main.cpp in project 2 
#include <..\Models\MyContainer.h> 
#include <..\Models\Employee.h> 
... 
CMyContainer<CEmployee> *pListEmployee; 
... // insert into pListEmployee 
// sort pListEmployee 
pListEmployee.sortContainer();//-> This command cause error 

Répondre

0

Essayez d'exporter MyComparer du .dll avec _declspec (dllexport)

+0

Il fonctionne. Merci de votre aide. Je pense juste que MyComparer est exporté avec la classe CEmployee mais je me trompe :-) – ducva