Господа,
караул! Может, кто-то может мне этот бред объяснить:
Есть большой проект, состоящий из подпроектов, т.е. выглядит это приблизительно так:
Proj_firma
|
Dllprint
|
Dllmain
|
Includes
В Dllprint есть класс CPManager (cpm.h лежит в папке includes, cpm.cpp лежит в папке Dllprint)
И выглядят приблизительно так:
cpm.h:
#ifdef _DLLPRINT
#define DLLPRINT_DLLINTERFACE __declspec( dllexport )
#else // _DLLPRINT
#define DLLPRINT_DLLINTERFACE __declspec( dllimport )
#endif // _DLLPRINT
class DLLPRINT_DLLINTERFACE CPManager
{
public:
// …
static void SetInfo( CString sText );
static void SetPInfo( void* hP );
void ToIt() ;
private:
static CString m_cstrText;
static void* m_hProj;
};
cpm.cpp:
CString CPManager::m_cstrText(_T(""));
void* CPManager::m_hProj = NULL;
….
void CPManager::SetProInfo( void* hProject )
{ m_hProj = hProject;}
void CPManager::SetInfo( CString sText )
{ m_cstrText = sText;}
void CPManager::ToIt()
{ // … }
В Dllmain применяются вызовы как статических функций , так и создание инстанции самого класса с последующим вызовом обычных функций, т.е. :
CPManager::SetInfo ( cstrObjectName );
…
m_pPMgr = new CPManager;
m_pPMgr->DoIt();
При компиляции появляется следующее:
warning C4273: 'private: static class CString CPManager::m_cstrText' : inconsistent dll linkage. dllexport assumed.
error C2491: CPManager::m_cstrText' : definition of dllimport static data member not allowed
warning C4273: 'private: static void * CPManager::m_hProj' : inconsistent dll linkage. dllexport assumed.
error C2491: CPManager::m_hProject' : definition of dllimport static data member not allowed
warning C4273: CPManager::DoIt() inconsistent dll linkage. dllexport assumed.
И в чем дело – не пойму…