DLL能被几个进程同时调用吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DLL能被几个进程同时调用吗?相关的知识,希望对你有一定的参考价值。

比如有一个动态链接库C,A进程把它加载到内存,B进程能调用C吗?
C在内存中有几个拷贝,如果A、B进程同时调用C库,不会发生什么冲突吗?
请专家解答一下。

可以同时调用,不发生冲突。事实上WINDOWS的许多系统DLL,几乎被运行的每一个程序同时调用,例如:OLE32.DLL、GDI32.DLL 参考技术A 通常 Ring3 下,进程之间的内存是相互独立的 。

A,B分别调用C的时候,实际上, A,B在各自内存,分配了一块内存来装载C,
,A,B 内存是相互对立的,内存中各自中的C ,不是同一个C 。

你所想的同一个C ,是指磁盘文件 ,内存中并不相同的,所以你继续用D,E,F。。。。。来调用C都不影响。
参考技术B 可以,c的内容(代码、数据、数据表等),在内存只有一份拷贝。
每个装入c模块的进程只是有一份虚拟内存地址映射表。+c中的非共享段变量分配的空间。
绝对不冲突
参考技术C 一个dll在物理内存中只有一个拷贝,但会映射到每个程序各自的虚拟内存地址中,dll中的变量和函数返回值在虚拟内存地址中会有单独拷贝。

子数涵数·VB——DLL动态链接库

一、定义

DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。

二、制作

1.打开vb,新建工程,选择新建中的ActiveXDLL。

2.再把工程名和模块名分别改成DLLproject和DLLclass(改成什么可以自定义,不要用默认的就好了,因为用默认的话,会在引用时和现用的工程或模块重命,如果你没改现用工程或模块名的话)。

3.输入代码如下,这个代码很简单就不打注释了(就是声明一个函数,其返回值是100)。

4.生成工程,完成DLL的制作。

三、调用

1.新建一个工程,选择新建中的标准 EXE。

2.工程->引用->浏览,选中之前做好的DLL文件,单击确定。

3.绘制窗口,并编写代码如下。

4.完成,效果如下。

以上是关于DLL能被几个进程同时调用吗?的主要内容,如果未能解决你的问题,请参考以下文章

两个程序同时调用一个DLL可以吗

C语言试题153之判断一个素数能被几个 9 整除

判断一个素数能被几个9组成的数整除?

dll是什麽文件能删除吗

C++:使 DLL 可同时被多个进程访问

Nginx内部有使用多线程吗