隐式链接没问题,因为类的对象是自己定义的,但是显式链接GetProcAddress()
得到的函数指针却是空的.因为没有定义类的对象.如果在dll里定义对象估计是可以的,但这样不好.

解决方案 »

  1.   

    得到空指针是因为C++编译器的name mangling机制把成员函数的名字用改变了。用depends打开你的DLL可以看到实际输出的成员函数的名字,用GetProcAddress可以得到它的地址。不过如果你不经过一个对象直接调用成员函数的话,很可能出问题的哦。
      

  2.   

    或者采用 #pragma comment(linker, "/EXPORT:entryname=internalname") 输出指定的 entryname, internalname 必须是用 depends 看到的输出名
      

  3.   

    考虑导出一个函数,在该函数中返回一个DLL封装类的对象指针
    在exe中只要一个基类指针就可以使用该对象了需要是虚基类喔。
      

  4.   

    如果没理解错的话,你说的显式是指LoadLibaray().如果是这样的话,据我所说,是无法使用含有类的DLL的.在使用含有类的DLL(我认为这叫扩展的DLL,以前曾和别人争论过,有人说只有用MFC才叫扩展DLL,后来也没有争出个所以然来),你必须采取隐式链接.楼上所说的方法是一种常用的处理方法,这样一来所有的类的活动都被限制于DLL内部,DLL的使用者仍就通过原始的C函数来创建对象.COM中实际就是延用了这种思想.
      

  5.   

    typedef HRESULT (CALLBACK *pfn)(void);函数指针定义LoadLibaray()载入DLL
    GetProcAddress()获取函数地址
    FreeLibrary()释放DLL就如Com函数CallCreateInstance()
      

  6.   

    显式链接GetProcAddress()
    得到的函数指针却是空的可能是函数名不对,它区分大小写的。可用depends工具查看一下。
      

  7.   

    Zark(金陵五月) 是对的。不能动态调用dll文件。
      

  8.   

    推荐一篇文章;
    http://www.codeguru.com/dll/expclass.shtml  
    挺好的,好好看看吧...
      

  9.   

    我想楼主应该是要在显式链接DLL时如何调用它的导出类吧?
    这种情况下,应该是在DLL中导出一个类的全局对象,然后在exe中直接调用这个全局变量就行了。