我把编写好的DLL文件放到数据库里。
每次取出来,然后动态调用。
现在的做法,先保存成临时文件,然后再调用。我想问一问有没有办法,不用保存临时文件,
从数据库里读到内存,直接调用。有没有办法?

解决方案 »

  1.   

    那大家讲一讲LoadLibrary这个函数到底是怎样把dll文件调入内存的。
    它到底是怎么工作的。
      

  2.   

    你在数据库里只保存DLL的路径,然后在根据这个路径动态调用不可以么?
      

  3.   

    无聊的做法?哈哈,既然我要用他肯定就有用他的道理,
    我编写的dll实现生成一个pdf文件并打印的功能,但是它是固定格式,
    如果我要改动生成pdf文件的格式的话,
    我必须写另外一个dll文件,
    但是客户机一次安装以后就不允许改动的。
    而且这样的客户机有很多很多。
    如果我把dll文件放到数据库里,
    我就可以在别的机子上把这个dll文件倒入服务器的数据库。
    这样岂不是很方便?如果你说无聊,请你给我出个好主意?
      

  4.   

    既然有服务器,那可以在客户端上实现在线更新的功能。将最新的DLL文件放在服务器上,然后通过客户端的在线更新功能下载就可以的。
      

  5.   

    to maxctc(幽谷小草) 谢谢你的回答,这样做并不比放到数据库里省事,
    其实我的主要问题是,我不太明白LoadLibrary这个函数的原理,
    不知道他是怎么工作的。
    也就是如果先以数据流的形式把dll读入内存,那么怎样使用这个dll文件。
    如果这个解决了,那么我在数据库读出dll文件的时候,就不用保存为临时文件了。
      

  6.   

    没有时间的话,你还是放弃该想法,
    LoadLibrary 工作方式大概如下
    1。loadlibrary使用内存映射方式来加载和执行dll
    2。系统根据dll本身信息来开辟一块区域
    3。发现无法在dll首选基址保留区域时,进行再定位操作。
    4。无论如何都要修改你的修改重定位表和导入表
    5。找到dll入口点dllmain函数执行。
    在仅仅是一个大概,还有许多细节的东西。