1。如果我的dll中引用了某个单元a.pas,再a.pas里面的initielization和finalization部分是什么时候被调用?是这个dll第一次装进内存和引用计数=0的时候调用?还是每当由应用程序调用这个dll和引用计数-1的时候发生?///////////////////2。在a.pas有个全局变量,这个变量是否能被调用这个dll的应用程序访问?
如果能,怎么访问?
如果一个进程修改了它,是否会影响到映射到其他进程的同名变量?
如果能,怎么访问?
如果一个进程修改了它,是否会影响到映射到其他进程的同名变量?
1.是每当由应用程序调用这个dll和引用计数-1的时候发生
2.不能
---------
我不能确定上面的回答!
finalization dll被释放的时候
,
2。 win98是所有的应用程序共享一个dll的。所以a.pas会影响
win2000是所有的程序都有一个dll的副本,所以a.pas不会影响如果要在 win2000下面创建一个进程间共享的变量,需要用到文件影射。
自己试试看把
2。finalization 内的程序是在该单元内所有程序执行后所执行;
所以 initielization 一般是一些重要的初始化,而finalization 就是用来释放一些程序结束还没被释放的内存,//第一个问题第二个问题:
如果你不用文件映射,理论上应该可以建一个过程来传递那个变量,
把该过程放在接口部分就可以啦,试试吧!
第二个问题可以试着用Build with package解决.
我经常这样干
到底是dll只有第一次被加载的时候执行initialazation还是每次有loadlibrary的时候也就是引用计数+1的时候都执行?
2.第二个问题:
如果你不用文件映射,理论上应该可以建一个过程来传递那个变量,
把该过程放在接口部分就可以啦,试试吧!
不过,我觉得你的问题不是怎么去想法使得DLL直接能都够存取应用程序的数据,
你应该考虑:你的设计是否有问题呢?
你的应用程序,应该将DLL作为一个服务程序来看待,程序应该主动提供参数,然
后调用DLL,DLL做服务操作,最后返回结果,然后程序再将结果保存到自己的数据区。
http://expert.csdn.net/Expert/topic/1135/1135662.xml?temp=.5984461所以我就想,用整个单元做一个数据对象,当initialazation的时候创建它,调用add方法添加热键的时候再单元局部变量里面维护一个数组,来保存所有注册的热键。finalization的时候unhook所有的。pas编译成exe自然没什么问题,但是编译成dll呢?要是数据共享,而且inialaiation触发多次,这种做法显然就不可行了!所以我才问出这么一个问题来//////////////////////////哪位如果有更好的办法,能够把键盘hook作成一个通用类,请不吝赐教!