DLL的动态链接可不可得到DLL中的类?
我知道这是不可以的,因为类中除了有代码(code)还有有数据(data),LoadLibrary(),GetProcAddress只是取得函数(代码)的指针并不能得到那些数据(data)。
但为什么静态链接就可以了?
谁能说出本质?

解决方案 »

  1.   

    我认为关键在于数据,如果没有头文件,只有类名,不可能知道一个类实例到底有多少个字节,即使完全了解了 C++ 的命名修饰规则并遍历 dll 的 export 表动态加载了所有的类函数。除非反编译然后根据代码猜测。其实要创建一个从 dll 中动态链接的类有很多方法,比如在头文件中定义一个纯虚类,然后 dll 输出两个接口 CreateObject / DeleteObject 用于实例的生成/释放,就可以实现 exe 调用和 dll 实现的无关性
      

  2.   

    这还有什么好本质的? 你从DLL里面能得到的无非就是地址,一个函数就是一个地址。
    如果是一个CLASS,情况就复杂了,因为它的内部有好多地址。你怎么办?如果DLL是你自己写的,那就简单了,通过一个函数返回那个类的指针。非常简单。
    另外,你还可以export那个class,然后你还可以在别的模块里面继承那个class============================================================================
    http://www.betajin.com/alphasun/index.htm           给我发信息请附带原帖地址
    http://alphasun.18en.com/                    http://shakingtoolkit.9126.com/
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  3.   

    可以的。
    看看此文章:http://www.codeguru.com/dll/expclass.shtml
      

  4.   

    多谢大家参与~~~
     jiadrun(MustBeSuccess) 给的链接不错
     In355Hz(好象一条狗) 的注意也不错
      

  5.   

    这有什么好迷糊的
    不就是静态链接是在编译时把代码直接放到进程中,
    当loadlibrary()得到dll句柄以后,他就可以在类中得到函数地址了
    而动态连接时在运行时,他首先得到dll的句柄,然后根据句柄计算得到函数地址
    但由于是要导出类而无法得到类的地址而已