什么是动态链接库?.doc什么是动态链接库?
什么是 dll:
dll 只是一组源代码的模块,每个模块包含一些可供应用程序或者其他 dll 调用的函数, 在应用程序调用一个 dll 里面的函数的时候, 操作系统会将 dll 的 文件映像映射到进程的地址空间中, 这样进程中所有的线程就可以调用 dll 中的 函数了
dll 加载完成后, 这个时候 dll 对于进程中的线程来说只是一些被放在地址 进程空间附加的代码和数据, 操作系统为了节省内存空间, 同一个 dll 在内存中 只有一个,也就是说如果你的的两个应用程序都需要加载 ,那么操 作系统也只会加载一次 到内存中
因为代码段在内存中的权限都是为只读的, 所以当多个应用程序加载同一个 dll 的时候,不用担心应用程序会修改 dll 的代码段。当线程调用 dll 的一个函 数,函数会在线程栈中取得传递给他的参数, 并使用线程栈来存放他需要的变量, dll 函数创建的任何对象都为调用线程或者调用进程拥有, dll 不会拥有任何对 象,也就是说如果 dll 中的一个函数调用了 VirtualAlloc ,系统会从调用进程 的地址空间预定地址, 即使撤销了对 dll 的映射,调用进程的预定地址依然会存 在,直到 用户取消预定或者进程结束。
示例代码 :
#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" __desclspec(dllimport)
#endif
5
MYLIBAPI int g_nResult;
7
8 MYLIBAPI int Add(int nLeft,int nRight)
1 #include <>
2
3 #define MYLIBAPI extern "C" __declspec(dllexport)
4 #include ""
int g_nResult;
6
int Add(int nLeft,int nRight)
{
g_nResult = nLeft + nRight;
return g_nResult;
}
输入命令 :
cl /LDd
可以生成可供调试的 dll
分别是
链接 器就会 生成
这个时候会多出四个文件 ,,,
保存的是在链接器生成 dll 的需要的信息 当链接器检测到应用程序导 出了 一个 函数 或者变 量, 文件, 这个只是列出了导出的函数和变量的符号名
输入命令查看 lib 里面的导出段
dumpbin -exports
Dump of Flie rt^
File Type: LIBRARY
Exports
opdinal name
| _fidd
g nJtesult
Sumnapy
BD , debugs
14
14 -idata$3
4 .idata$4
4 -idata$5
A .idata$6
我们可以看到这个lib里面export 了 _A
什么是动态链接库? 来自淘豆网m.daumloan.com转载请标明出处.