DLL 共享数据学习

来源:互联网 发布:centos 安装apache2 编辑:程序博客网 时间:2024/04/29 08:46

要想在DLL共享数据,必须重新定义一个共享段,然后用函数去修改添加

DLL代码:

#include "stdafx.h"#pragma data_seg("MyData")                                  //定义一个共享段int name=10;#pragma data_seg#pragma comment(linker,"/section:MyData,rws")extern "C"  _declspec(dllexport) int add(void)             //用函数去操作它{return name*5;}extern "C"  _declspec(dllexport) int letdown(void){name = name - 1;return name*5;}BOOL APIENTRY DllMain( HANDLE hModule,                        DWORD  ul_reason_for_call,                        LPVOID lpReserved ){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:MessageBox(NULL,"DLL载入","OK",NULL);break;case DLL_PROCESS_DETACH:MessageBox(NULL,"DLL卸载","OK",NULL);break;}    return TRUE;

应用程序1)

#include "stdafx.h"#include <windows.h>#include <process.h>int main(int argc, char* argv[]){char str[] = "C:\\Documents and Settings\\Administrator\\桌面\\test\\Dlltest.dll";FARPROC procaddress = GetProcAddress(LoadLibraryA(str),"letdown");int recv = procaddress();printf("name = %d\n",recv);system("pause");return 0;}
应用程序2)
#include "stdafx.h"#include <windows.h>#include <process.h>int main(int argc, char* argv[]){FARPROC procaddress = GetProcAddress(LoadLibraryA("Dlltest.dll"),"add");int recv = procaddress();printf("name = %d\n",recv);system("pause");return 0;}

效果:

先用 程序1  改变了 name值 运行后  输出9*5

然后程序2运行 如果是共享内存的话  还是输出9*5  共享成功


但如果 没有设置  #pragma data_seg 的话   每个EXE调用的DLL  都是独立的