虽然论坛里已经有些关于__declspec(dllimport)的讨论,可我还是不太明白,还请高手帮一下
如果用__declspec(dllimport)来修饰一个变量
是把这个变量的地址映射到某个DLL中的变量地址吗?
__declspec(dllimport)都不需要标明这个变量来自哪个DLL,一个可执行文件可能加载很多DLL,那系统怎么确定那个变量来自哪个DLL?
最重要的是我读到的代码引用的变量来自ntoskrnl.exe,难道系统会把.exe文件也加载到我的进程空间来?
如果用__declspec(dllimport)来修饰一个变量
是把这个变量的地址映射到某个DLL中的变量地址吗?
__declspec(dllimport)都不需要标明这个变量来自哪个DLL,一个可执行文件可能加载很多DLL,那系统怎么确定那个变量来自哪个DLL?
最重要的是我读到的代码引用的变量来自ntoskrnl.exe,难道系统会把.exe文件也加载到我的进程空间来?
解决方案 »
- vc2008环境下修改setdlgitlmtext的问题?
- Opencv把连续jpeg图片转为avi文件,求指点
- Vc5程序edit控件内容提取问题
- 读取域控制器下的所有容器ou、帐户信息 ,请问该如何实现?
- AOD 奇怪问题 _ConnectionPtr::State->adStateOpen 欺骗了我。
- directDraw
- DLL初学者的困惑!~~
- 現在市場上用c++builder或vc開發數據庫的多嗎
- vc++ 入门到基本掌握 用什么书好.?>
- 如何利用win32 API捕获打印机的消息
- 如何响应用于播放视频流的Picture控件的鼠标单击事件?
- 请问看到diblook中的类视图中,为何没有CChildFrame
__declspec(dllimport) Object obj;
你可以直接在程序中使用obj访问dll中导出的obj变量。关于来自哪个dll,主要是通过lib链接时来确定。
dll在加载时系统读取它的导入表,里面就有相应导入符号所在的dll名称。.exe和dll文件的格式都是一样的,系统在处理导入表时遇到没有加载的模块,会对其进行加载。
你指的是调用系统函数LoadLibrary,在解析该dll时再确定__declspec(dllimport)的变量的位置?
加载dll时由LoadLibrary根据导入表获取相应地址。
我们的程序在默认情况下到底链接了多少DLL啊?
Alt+F7,在link的input一项中可以查看要链接的导入库查看程序默认的dll可以用VC6提供的depends工具,也可以debug时直接在状态输出时查看
那些程序一开始就加载的DLL是由编译器插入了LoadLibrary函数调用来加载的还是由操作系统在加载.exe文件的时候直接加载的(也就是在.exe文件中找不到LoadLibrary的调用)?
不过估计OS内部还要调用LoadLibrary之类的函数(这个纯属猜测:-) )
程序一开始加载的dll是由操作系统加载的。
因为根据各位说的,处理这类变量会涉及到链接器的行为.