이제 DLL에서 필요한 함수들을 노출시키는 방법에 대해 알아보도록 하자.
예를 보면서 이야기 하는것이 빠를것이다.
static DataTypeMap __DataTypeMap[]=
예를 보면 두개의 함수를 제공하고 있다.
하나는 배열의 크기 , 다른 하나는 배열의 포인터를 넘겨주는 함수이다.
DataTypeMap이라는 구조체는 아이템의 keyword , 해당 아이템을 처리할수 있는 클래스(여기서는 CHole이라는 클래스)를 생성하는 함수 포인터로 구성되어 있다.
예를 보면서 이야기 하는것이 빠를것이다.
#ifdef HOLEDATA_EXPORTS
#define HOLEDATA_EXT_CLASS __declspec(dllexport)
#else
#define HOLEDATA_EXT_CLASS __declspec(dllimport)
#endifstatic DataTypeMap __DataTypeMap[]=
{
{CHole::TypeString , CHole::GetInstance}
};
extern "C" HOLEDATA_EXT_CLASS const unsigned int DllGetDataTypeMapCount()
{
return (sizeof(__DataTypeMap) / sizeof(__DataTypeMap[0]));
}
extern "C" HOLEDATA_EXT_CLASS DataTypeMap* DllGetDataTypeMap()
{
return __DataTypeMap;
}예를 보면 두개의 함수를 제공하고 있다.
하나는 배열의 크기 , 다른 하나는 배열의 포인터를 넘겨주는 함수이다.
DataTypeMap이라는 구조체는 아이템의 keyword , 해당 아이템을 처리할수 있는 클래스(여기서는 CHole이라는 클래스)를 생성하는 함수 포인터로 구성되어 있다.
class HOLEDATA_EXT_CLASS CHole : public CPDMSData
{
public:
const char* type() const;
double size() const;
CIsVect3d axis() const;
CIsPoint3d origin() const;
virtual void Parse(CDataScanner* pScanner);
CHole();
virtual ~CHole();
IS_DECLARE_DATA_FUNC()
private:
void CalcVolume();
CIsPoint3d m_origin;
CIsVect3d m_axis;
double m_size;
double m_rotate;
char m_szPanelRef[NAME_BUF_SIZE];
char m_szHoleType[NAME_BUF_SIZE];
};
댓글
댓글 쓰기