dll与程序间的数据共享(#pragma data_seg())
来源:互联网 发布:淘宝大学诺思星 编辑:程序博客网 时间:2024/04/20 14:08
网上有不少写关于#pragma data_seg("shared")实现数据共享的,但是大部分是代码片,我实现的是两个程序调用一个dll,并使用同一数据段
#include <stdio.h>#include <windows.h>BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;}#pragma data_seg("shared")//定义共享数据段,必须初始化int a=4;int b=1;#pragma data_seg()#pragma comment(linker,"/SECTION:shared,RWS")//指定该数据段可读写void __stdcall set(int pa,int pb){a=pa;b=pb;}int __stdcall show(){return a+b;}该文件定义了两个导出函数,故还需要在def文件中声明:LIBRARY "shareDll"
EXPORTS
set
show编译生成dll和lib文件,我们用vs带的命令行工具可以进行查看:
dumpbin /exports shareDll.dll
有
ordinal hint RVA name
1 0 00011005 set = @ILT+0(?set@@YGXHH@Z)
2 1 000110CD show = @ILT+200(?show@@YGHXZ)这样几行,导出成功
下面我们就要新建两个工程,其中一个负责每隔1秒调用show()显示结果,另一个负责调用set(int,int)改变数据,通过查看前一个程序显示数据判断是否成功
#include <stdio.h> #include <windows.h> int (__stdcall *show)(); void main() { int result; HMODULE pMo=::LoadLibrary(L"E://backup//VisualStudio2008//shareDll//Debug//shareDll");//注意转义 show =(int (__stdcall *)())::GetProcAddress(pMo, "show"); int i=1; while(i++<10){ result=show(); printf("%d",result); Sleep(1000); } }
#include <stdio.h> #include <windows.h> void (__stdcall *myfun)(int,int);//当导出函数带有参数时,要这样写 int (__stdcall *show)(); void main() { int result; HMODULE pMo=::LoadLibrary(L"E://backup//VisualStudio2008//shareDll//Debug//shareDll"); myfun=(void (__stdcall*)(int,int))GetProcAddress(pMo,"set"); show =(int (__stdcall *)())GetProcAddress(pMo,"show"); myfun(7,9); printf("%d",show()); }
- dll与程序间的数据共享(#pragma data_seg())
- #pragma data_seg在DLL中共享数据的应用
- #pragma data_seg在DLL中共享数据的应用
- #pragma data_seg在DLL中共享数据的应用
- #pragma data_seg实现DLL进程间数据共享
- Dll的各进程之间共享-#pragma data_seg预处理指令用于设置共享数据段
- 通过#pragma data_seg共享数据
- #pragma data_seg共享数据使用说明
- 同一个dll被多个进程使用的数据共享(Data_seg)
- 关于.NET应用程序间数据的共享(data_seg)
- dll #pragma data_seg注意事项
- dll #pragma data_seg注意事项
- 进程共享变量#pragma data_seg用法 / 数据共享/进程通信
- #pragma data_seg() 在进程通信,数据共享上的用法总结
- #pragma data_seg() 在进程通信,数据共享上的用法总结
- #pragma data_seg() 在进程通信或数据共享上的用法总结
- 进程共享数据段#pragma data_seg原来要这么用
- 利用#pragma data_seg在进程间共享变量
- 借鉴丰田方法对大型软件组织进行敏捷改造 (上)
- Redhat AS5 安装 oracle10G
- JAVA和C++区别(ZZ)
- 如何卸载Eclipse插件
- 什么是回调函数
- dll与程序间的数据共享(#pragma data_seg())
- deCarta与DDS的关系
- 初入工作,请各位前辈给予指点
- JAVA基础
- IBM WebSphere云平台首席架构师谈中间件和云计算
- daCarta
- 关于CString
- .NET中Eval()方法大全
- IBM部门介绍:研发部(R&D)【CDL、CRL、CSTL】