怎样将一个类封装在dll里?

解决方案 »

  1.   

    你把DLL当成APPLICATION做不就成了!
      

  2.   

    拿向导产生一个DLL形式的COM组件
      

  3.   

    使用MFC提供的修饰符号_declspec(dllexport) 在要输出的函数、类、数据的声明前加上_declspec(dllexport)的修饰符,表示输出。__declspec(dllexport)在C调用约定、C编译情况下可以去掉输出函数名的下划线前缀。extern "C"使得在C++中使用C编译方式成为可能。在“C++”下定义“C”函数,需要加extern “C”关键词。用extern "C"来指明该函数使用C编译方式。输出的“C”函数可以从“C”代码里调用。
        
        例如,在一个C++文件中,有如下函数:
        extern "C" {void  __declspec(dllexport) __cdecl Test(int var);}
    其输出函数名为:Test 

    MFC提供了一些宏,就有这样的作用。AFX_CLASS_IMPORT:__declspec(dllexport)
     
    AFX_API_IMPORT:__declspec(dllexport)
     
    AFX_DATA_IMPORT:__declspec(dllexport)
     
    AFX_CLASS_EXPORT:__declspec(dllexport)
     
    AFX_API_EXPORT:__declspec(dllexport)
     
    AFX_DATA_EXPORT:__declspec(dllexport)
     
    AFX_EXT_CLASS: #ifdef _AFXEXT 
    AFX_CLASS_EXPORT
    #else
    AFX_CLASS_IMPORT
     
    AFX_EXT_API:#ifdef _AFXEXT
     AFX_API_EXPORT
     #else
     AFX_API_IMPORT
     
    AFX_EXT_DATA:#ifdef _AFXEXT
      AFX_DATA_EXPORT
      #else
      AFX_DATA_IMPORT 像AFX_EXT_CLASS这样的宏,如果用于DLL应用程序的实现中,则表示输出(因为_AFX_EXT被定义,通常是在编译器的标识参数中指定该选项/D_AFX_EXT);如果用于使用DLL的应用程序中,则表示输入(_AFX_EXT没有定义)。 要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使用_declspec(_dllexport)。如:class AFX_EXT_CLASS CTextDoc : public CDocument
    {

    }extern "C" AFX_EXT_API void WINAPI InitMYDLL(); 这几种方法中,最好采用第三种,方便好用;其次是第一种,如果按顺序号输出,调用效率会高些;最次是第二种。