我想在动态加载的DLL中开一大块内存来存储数据,卸载之前把这些数据传给调用它的EXE,要怎么办啊??
应该是进程私有空间的问题吧,请高手指点,有代码更好!
应该是进程私有空间的问题吧,请高手指点,有代码更好!
解决方案 »
- MFC Console 编译问题
- 请问哪里有tcptrace的源码?能够响应多线程的。
- UDP通信,Release版本下,有一方收不到数据,郁闷啊。
- 怎么用VC写自己的API呢?
- 请问sdi的DOCUMENT VIEW结构里,XXDoc.h为什么包含在XXView.cpp里面而不是包含在XXView.h里面?
- 自动计划(autoplan)源代码***强烈推荐
- 为什么我的程序中一用strcpy 或strcat 程序就自动退出了。
- ***********************向高手们请教一个问题..**************************
- 请问在打开通过OLE DB连接的数据库表的语句中插入sql语句行吗?
- 工程编译的问题。简单分多就是这么实惠
- 求助:windows下可执行文件的默认字体
- 麻烦大家给我讲一下回调函数的怎么回事,谢谢。
2也可以用SendMessage将内存数据传给应用程序
3用COM也可以
应该是在进程的私有空间里面开空间,
我想要一段示例代码啊。
就像HeapAlloc之类的函数吧rivershan(笨猫)(爱情是什么?)
共享数据段怎么用呢??
给段示例代码吧
#pragma data_seg("SharedDataName")
HHOOK hHook=NULL;
#pragma data_seg()
在#pragma data_seg("SharedDataName")和#pragma data_seg()之间的所有变量 将被访问该Dll的所有进程看到和共享。
msdn上很清楚的,看看吧,呵呵
我不是要在多个进程中共享一个DLL的数据段,
而是要在一个EXE和它的DLL之间共享一个数据段,
使EXE在DLL被卸载之后也可以访问该数据段,weirdy(软件设计师)
最有效率的是在exe中new,然后传给dll,其他的效率都要低很多,尤其是大内存块如果要在EXE中new,必须先确定大小,而这个数据段的大小要在DLL里才能确定,
要用这种方法,当然也可以在卸载DLL之前,传给EXE一个内存大小的数值
然后再在EXE中new内存,但这样在同时要有两块一样的内存,增加了对计算机内存大小的要求请各位高手再给指点一下吧
是否可以用VisualAlloc先预留一大块内存地址呢
还有HeapAlloc是在进程的私有堆开内存,
只是不知道如果DLL被卸载后是否会被清空呢,
你所说的用SendMessage的方法是怎么样的呢
请指点一下吧
至于com对我来说距离还比较遥远吧
我只是一个初学者啊
只要是new或malloc分配的,就不会随DLL而清空,但可能有个问题,如果同时存在静态链接与动态链接的你的DLL,则在EXE中释放要出错.最好是在DLL中申请的就在DLL中释放.
因为你调用的很多系统api也是这样的。比如DWORD GetModuleFileName( HMODULE hModule, // handle to module to find filename for
LPTSTR lpFilename, // pointer to buffer for module path
DWORD nSize // size of buffer, in characters
);
在DLL中直接用EXE中的内存
这样DLL卸载以后,EXE中仍然可以使用
用TextOut显示出来,在TextOut后调用FreeLibrary可以正常显示,
但是如果把FreeLibrary放在TextOut的前面就不显示,是怎么回事啊
用GetProcessHeap,然后用HeapAlloc也是同样
这些函数到底要怎么用啊??
按理说在DLL中如果不用
进行模块转换,应该保持EXE的模块
但我在DLL的输出函数中调用
CString ps=AfxGetAppName();
AfxMessageBox(ps);
时显示的竟是EXE的App名
这是怎么回事啊
我没有调用AFX_MANAGE_STATE(AfxGetModuleState());
我用的是Regular DLL与MFC静态链接,在EXE中用LoadLibrary
是不是这个转换在与MFC静态链接的DLL里是自动的啊
如果要转换回来要怎么办呢
然后把起始地址和进程HANDLE传给dll,当dll在写数据时发现内存不够就用EXE的HANDLE申请页就行了.
用::VirtualAllocEx(HANDLE hProcess,.......)hProcess是EXE的HANDLE,其它参数查查CSDN就行了。