dll调用dll可以嵌套吗?可以,嵌几层? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这个嵌套指什么呢?是A使用B,b又使用c,c再使用D,这种分级的还是a使用了b,b使用了c,从又使用了a,这种循环引用的 对于这个没有没有专门做过试验,不敢肯定答复。不过根据DLL的机制做如下分析: 你所谓的这种嵌套引用,如果有问题,应该也是关于进程地址空间之类的问题,DLL在WIN32平台中,通过映射文件达到信息共享,对于进程中的线程来说,DLL的代码和数据看上去就像恰巧是在进程的地址空间中的额外代码和数据一样。当一个线程调用DLL函数时,该DLL函数要查看线程的堆栈,以便检索它传递的参数,并将线程的堆栈用于它需要的任何局部变量。此外, DLL中函数的代码创建的任何对象均由调用线程所拥有,而DLL本身从来不拥有任何东西。例如,如果VirtualAlloc函数被DLL中的一个函数调用,那么将从调用线程的进程地址空间中保留一个地址空间的区域,该地址空间区域将始终处于保留状态,因为系统并不跟踪DLL中的函数保留该区域的情况。保留区域由进程所拥有,只有在线程调用VirtualFree函数或者进程终止运行时才被释放。 一般来说,加载程序为新进程创建一个虚拟地址空间。可执行模块被映射到新进程的地址空间。加载程序对可执行模块的输入节进行分析。对于该节中列出的每个DLL名字,加载程序要找出用户系统上的DLL模块,再将该DLL映射到进程的地址空间。由于DLL模块可以从另一个DLL模块输入函数和变量,因此D L L模块可以拥有它自己的输入节。 DLL中的全局变量和静态变量的处理方法和可执行文件是完全相同的。当一个进程将DLL的映像文件映射到它的地址空间中去时,系统将同时创建全局数据变量和静态数据变量的实例。 根据上面所言,DLL中数据应该不会受到你嵌套的影响。 应该没问题,不过,没试过,正如楼上所说,一般没有这种需求。一般就那么十来个Dll(自己编的),相互间循环引用。 正如xxmmmx(踢踏) 所说 一般一个程序10几个DLL足够用了 LZ若有需求可以不妨试试不就知道了 本人刚学DELHPI,大家推荐点入门的好书 菜鸟问题:字符串的左截对右截对函数是啥? 大家都关心的问题... delphi如何连接oracle8数据库 -- 急!! 怎样用命令关闭IE窗口? 如何使fastreport显示adoquery查询的结果 Close 退出程序问题弹出是否退出问题。 用delphi怎么连接数据库 谁会Modem对Modem的数据传送 如何使用DELPHI开发一个没有窗体的WIN程序,详情见内??? 求助:怎样在DELPHI 7上编写屏幕取词的程序? 郁闷...
是A使用B,b又使用c,c再使用D,这种分级的
还是a使用了b,b使用了c,从又使用了a,这种循环引用的 对于这个没有没有专门做过试验,不敢肯定答复。不过根据DLL的机制做如下分析:
你所谓的这种嵌套引用,如果有问题,应该也是关于进程地址空间之类的问题,DLL在WIN32平台中,通过映射文件达到信息共享,对于进程中的线程来说,DLL的代码和数据看上去就像恰巧是在进程的地址空间中的额外代码和数据一样。当一个线程调用DLL函数时,该DLL函数要查看线程的堆栈,以便检索它传递的参数,并将线程的堆栈用于它需要的任何局部变量。此外, DLL中函数的代码创建的任何对象均由调用线程所拥有,而DLL本身从来不拥有任何东西。例如,如果VirtualAlloc函数被DLL中的一个函数调用,那么将从调用线程的进程地址空间中保留一个地址空间的区域,该地址空间区域将始终处于保留状态,因为系统并不跟踪DLL中的函数保留该区域的情况。保留区域由进程所拥有,只有在线程调用VirtualFree函数或者进程终止运行时才被释放。
一般来说,加载程序为新进程创建一个虚拟地址空间。可执行模块被映射到新进程的地址空间。加载程序对可执行模块的输入节进行分析。对于该节中列出的每个DLL名字,加载程序要找出用户系统上的DLL模块,再将该DLL映射到进程的地址空间。由于DLL模块可以从另一个DLL模块输入函数和变量,因此D L L模块可以拥有它自己的输入节。
DLL中的全局变量和静态变量的处理方法和可执行文件是完全相同的。当一个进程将DLL的映像文件映射到它的地址空间中去时,系统将同时创建全局数据变量和静态数据变量的实例。
根据上面所言,DLL中数据应该不会受到你嵌套的影响。
一般就那么十来个Dll(自己编的),相互间循环引用。
一般一个程序10几个DLL足够用了
LZ若有需求可以不妨试试不就知道了