우리는 응용 프로그램에 대한 DLL 플러그인을 개발하는 경우가 있습니다. 모든 플러그인에는 공통된 소스 파일 세트가 있습니다. 그러나 기본 라이브러리로 분리하려고합니다. 우리는 하나의 DLL 프로젝트에 모두 포함되는 다음 구현을 가지고 있습니다 :분리 기준 : 기본 라이브러리를 만들고 구체적인 클래스에 대한 종속성 제거
// dllentry class
BaseImporter* spImporter = NULL;
extern BaseImporter* createImporterImplementation(const std::string& pDllFileName);
int __stdcall DllImportOpen(
const char* pDllFileName,
const char** ppImporterUniqueName,
const char** ppImporterVersion)
{
// method implementation in concrete class source file
spImporter = createImporterImplementation(pDllFileName);
(*ppImporterUniqueName) = spImporter->GetUniqueName();
(*ppImporterVersion) = spImporter->GetImporterVersion();
return (0);
}
// base importer class
class BaseImporter()
{
public:
const char* GetUniqueName() const {return mUniqueName.c_str();}
const char* GetImporterVersion() const {return mVersion.c_str();}
protected:
// some pure virtual methods here
}
// concrete class
class XImporter : BaseImporter()
{
// implement base importer
}
// resides in XImporter source file
BaseImporter* createImporterImplementation(
const std::string& dll_filename)
{
return new XImporter (dll_filename);
}
1 DLL로 함께 빌드하면 잘 작동합니다. 그러나 dllentry 클래스와 BaseImporter
을 기본 라이브러리로 분리하고 싶습니다. createImporterImplementation
의 구현을 검색 할 때 기본 라이브러리를 컴파일 할 때 링커 오류가 발생합니다. 어떻게하면 콘크리트 라이브러리와 함께 사용할 수있는 기본 라이브러리를 잘 구분할 수 있습니까?
좋습니다. 나는 그것을 시도 할 것이다. 월요일에 알려 드리겠습니다. – Seth