我在论坛中看到只要在dll的类前加入_declapec( dllexport)然后在引用的地方加入dll、lib、.h文件就可以了。我试了之后不行,编译时提示error LNK2001: unresolved external symbol "public: void __thiscall CModem::InitModem(struct HWND__ *)" (?InitModem@CModem@@QAEXPAUHWND__@@@Z)请问个为这到底是什么原因,谁有列子,可供参考,我用的是普通dll。
如果我要动态加载应该如何解决?
谢谢!谢谢!

解决方案 »

  1.   

    www.codeproject.com 上有一个例子。找一下。
      

  2.   

    普通DLL好像是不能导出类的,只有MFC扩展DLL可以,而且这个DLL只能用在使用MFC的程序中。好像是这样,不一定对 :)
      

  3.   

    普通DLL好像是不能导出类的,只有MFC扩展DLL可以,而且这个DLL只能用在使用MFC的程序中。好像是这样,不一定对 :)
      

  4.   

    谁有这方面的例子,能否发一个给我,em:[email protected]
      

  5.   

    在需导出的类前加入AFX_EXT_CLASS

    class AFX_EXT_CLASS aClass : public Parent
      

  6.   

    这是个连接错误,说明编译通过了,但缺少一个CModem的类实现的代码或 obj, 至少 InitModem()这个方法没有。
      

  7.   

    不但普通DLL能导出类,连EXE都能间接导出类。
    只是手法要变通一些。假设你要导的类叫CMyClass
    写个虚函数表:
    class IMyClass{
       virtual HRESULT __stdcall myFun() = 0;
       //其它虚函数
    }
    //实现类:
    class CMyClass : public ICyClass{
       HRESULT __stdcall myFun();
       //其它实现
    }
    导出函数
    HRESULT __stdcall getObject(void **p)
    {
       *p = (void *)new CMyClass;
       return S_OK;
    }在调用DLL的程序里,include那个虚函数表,再调用getObject得CMyClass实例指针,将其转换为(IMyClass *)p即可使用。
      

  8.   

    to icelight(icelight):我是了,在编译时提示error LNK2001: unresolved external symbol "public: virtual bool __stdcall CMod::WriteCom(char *,unsigned int)" (?WriteCom@CMod@@UAG_NPADI@Z)是什么含义?如何修改?
      

  9.   

    对于一般的win32DLL,只要在类名前加上_declspec(dllexport)就可以,至于出了连接错误可能是你的函数没有实现,要么在导入的工程中设置有问题。对于mfc的技术内幕上说只有扩展的才能导出类,我觉得最好不用mfc提供的那个宏,而直接用c++的关键字,就是前面提到的
      

  10.   

    我使用win32dll后,再导入处如何写,例如:class _declspec(dllecport) MyClass,然后再使用的地方写_declspec(dllimport) MyClass,是否还要加入MyClass的头文件。或另写头文件。
      

  11.   

    在调用DLL的程序里,要这样写:
    //#include "COM.h" 它里面有关于IMyClass的定义(虚函数表)。不要出现CMyClass的定义。IMyClass *pObject;   //不要写成CMyClass *pObjcet
    //loadlibrary
    //用函数指针调*pFun(&pObject);
    if(pObject!=NULL)
       pObjcet->WriteCom();//即可通过编译最最最关键的地方是你虚函数表有没有写对。否则LINK出错。
      

  12.   

    建立mfc扩展dll工程
    在你想要导出的类定义前加 AFX_EXT_CLASS 宏
    例:
    class AFX_EXT_CLASS myclass
    {
    ....
    ....
    };
    在引用工程中包含导出头文件,工程设置 .lib
    就可了。
      

  13.   

    在Win32DLL中是否可导出类,在Win32DLL中如何使用MFC类?
      

  14.   

    1。写一个DLL\EXE通用的头文件
    #ifdef    MY_DLL
    #define   DLL_CLASS _declapec( dllexport)
    #else
    #define   DLL_CLASS _declapec( dllimport)
    #endclass DLL_CLASS MyClass
    {
      ...
    }2.在DLL工程中定义MY_DLL宏
      不要.DEF文件
      设置要输出.lib3.在EXE工程中 不 定义MY_DLL宏
      LinkDLL工程中生成的.lib文件