dll是怎样避免冲突的 我是新手很困惑 我有A,B两进程要有K.DLL; A用K.DLL的FUN1()函数,B用K.DLL的FUN2()函数. 问题:1.那K在内存中是不是有两份?,2.在A中有没有FUN2()函数的副本?3.如果K在内存中只有一份 那我多个进程调用一个DLL的一个函数那不乱套了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以认为K.dll在A和B进程中都存在一份copy. 尽管在物理内存中可能只有一份K.dll。 你管那么多干嘛.如果那个 dll 只被读,不被写,那么无论多少个exe调用这个dll, 物理内存只有一份dll.一旦哪个进程手痒痒,改写dll, 根据ms的'最偷懒'方法---------写时复制 原理,那个dll将单独被copy,然后改写. 我说,你管那么多干嘛? 对了, 每个函数都可以看成一个模板, 不同的进程用各自的内存(堆栈),代入函数,所以不会乱套.对于类函数的话,你也不用担心, 每个类成员函数实际上的调用,都会传入this指针, 一般是最后一个被压入堆栈的. 你可以反汇编看看自己的程序. 也有直接用寄存器传入的,这个比较少见,个人对此有点迷惑. AB进程都有完整独立并且唯一的K.DLL的地址空间(最起码在虚拟地址空间如此),DLL中的全局变量和函数永远不会冲突(共享数据段除外)。 如果我在DLL里有个类,我在应用程序中要构造这个类的两个对象,如过没两个副本怎么行 这两个对象有不同的数据 比如这个类 就是个我写的BUTTON 我的两个按钮大小不同 看样子楼主是刚用Dll,只要不涉及共享内存什么,最简单的办法就是你把Dll看作完全是你进程内存中私有的,不管你在dll里面做了什么,只对当前进程有效。有时间可以翻看专门讲Dll编程原则的书嘛。 我是个刚用 我还碰到了个问题 为什么我用loadlibary()动态加载DLL一定要在DEF文件中声明啊网上说不用的 我只在函数中用 extern "C" __declspec(dllexport)声明不行但可以用#pragra静态连接 不用了我解决了 是要把前面的WINAPI宏去掉.如:extern "C" __declspec(dllimport) void WINAPI InstallLaunchEv(); 就不行 而extern "C" __declspec(dllimport) void W InstallLaunchEv();就行了 着是为什么啊? 写toolbar的一些小的问题。 大家推荐一本计算机网络方面编程的好书吧(不是WEB开发哈) 请教:关于视频监控系统 c++ 中乘方的运算符是什么? 在线等待,如何在vc中调用asp,并实现文件的上传? dialog的简单问题 菜鸟请教高手问题,送50分! 请教一个关于多文档应用程序的问题,望高手指教。 学习过程中的迷惑? 怎样修改CStatic和CEdit的字体的大小和字型等问题 csocket中无法接收完整数据 急!!!!!!!!!!!!!!!!!!!!!! 我想做个发送实时数据的网络程序,一秒钟发4次每次1kb量,用线程+CSocket..
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货