不能用模式窗体,可以使用非模式窗体,注意在delphi中使用还需要传递Application的句柄,并在主程序保存dll窗体的句柄,以便在关闭窗体时回传给dll,调用dll中的函数来关闭窗口,这样可以保证你的内存是安全的

解决方案 »

  1.   

    作为一个变通的办法,你可以为每个dll封装一个exe(当然共用一个就够了),然后在主进程中调用exe,这样在进程之间就不会转移不了了
      

  2.   

    但用exe文件的话安全性就不高了, 例如我要向动态连接库传参数, 可以在登录里面, 但要再凋另一个exe文件的话,就要把参数传该那个exe文件, 这样参数很容易被截取的。
      

  3.   

    我现在想了一种方法:
    在登录中创建一个新的进程, 再在这个新进程中调用dll, 使各个dll在不同的地址空间中运行就行了。
    不过可能不行,因为不知道创建进程是不是必须依存与一个exe文件
      

  4.   

    调用dll一样很容易截取参数的,道高一尺,魔高一丈,安全性是相对的,若必须考虑高安全性应该采用秘文传递参数,否则无论dll还是exe都是不安全的,另外如果安全性不是要求非常高的话可以考虑采用消息传递,使截取操作麻烦点
      

  5.   

    不错, dll一样容易截取, 但是作dll的人毕竟比做exe的人要少呀(虽然两种方法实现起来没什么区别)。采用消息传递及加密也曾考虑过, 不过我们的子程序有一百多个, 现在都采用明文传参数, 而且格式已经固定了, 要改的话恐怕要费一番功夫了(真不愿意把子模块一个个打开修改, 再编译。多呀!)
    不知道还有没有别的办法?
      

  6.   

    我是说传给共用exe的参数采用消息传递及加密,exe调用dll是和原来一样,工作量不大,和你原来的安全性也差不多
      

  7.   

    奥, 原来是这样, 改动是不大,不过在登录中调这个exe, 采用什么方法好呢?, 我原来是采用的winexec(), 这样就不知道什么时候exe文件已经运行了(主要是可以接受消息了)?
      

  8.   

    你可以发个帖子去问问,有一个API,Create什么了,最近做java,把API忘的差不多了,尤其不常用的,不好意思
      

  9.   

    是createprocess吧, 多谢,如果createprocess在调用的exe执行后才返回值, 那就可以了。
    问题基本解决了。 就是不知道执行速度会不会变慢。