近日用到了DLL中的共享数据段,使用LIB文件时可以实现的数据共享,只用DLL文件就不行了!
使用LIB文件时同时打开两个09DllSharedApp.exe,第一个显示value为1,2,3,第二个显示value为4,5,6,说明数据共享正确。
直接使用DLL文件时同时打开两个09DllSharedApp.exe,都显示value为1,2,3,数据没有实现共享。
查了很多资料都没找到解决方法,不知道问题出在哪里,请高手指点一下!
使用LIB文件时同时打开两个09DllSharedApp.exe,第一个显示value为1,2,3,第二个显示value为4,5,6,说明数据共享正确。
直接使用DLL文件时同时打开两个09DllSharedApp.exe,都显示value为1,2,3,数据没有实现共享。
查了很多资料都没找到解决方法,不知道问题出在哪里,请高手指点一下!
// -- DllSharedLib.h -- // #ifdef DLLSHARED_EXPORTS #define DLLSHARED_API __declspec(dllexport) #else #define DLLSHARED_API __declspec(dllimport) #endif BOOL DLLSHARED_API WINAPI GetValue(); // -- DllSharedLib.cpp -- // #include <Windows.h> #define DLLSHARED_EXPORTS #include "DllSharedLib.h" #pragma data_seg("YCIShared") // 共享内存段,读|写|共享 int g_iValue = 0; #pragma data_seg() int WINAPI GetValue() { g_iValue++; return g_iValue; } // -- DllSharedLib.def -- // EXPORTS GetValue SECTIONS YCIShared Read Write Shared // -- 使用LIB能正确共享的 DllSharedApp.cpp -- // #include <stdio.h> #include <windows.h> #include "DllsharedLib.h" #pragma comment(lib,"09DllSharedLib") void main() { printf("变量%d!\n",GetValue()); printf("变量%d!\n",GetValue()); printf("变量%d!\n",GetValue()); printf("按任意键退出!\n"); getchar(); } // -- 直接使用DLL不能正确共享的 DllSharedApp.cpp -- // #include <stdio.h> #include <windows.h> void main() { typedef int (WINAPI *PFNGETVALUE)(); HMODULE hModule = ::LoadLibrary(L"09DllSharedLib.dll"); if(hModule != NULL) { PFNGETVALUE mGetValue = (PFNGETVALUE)::GetProcAddress(hModule, "GetValue"); if(mGetValue!=NULL) { printf("变量%d!\n",mGetValue()); printf("变量%d!\n",mGetValue()); printf("变量%d!\n",mGetValue()); } } printf("按任意键退出!\n"); ::FreeLibrary(hModule); getchar(); }
解决方案
20
20
帮结帖+蹭分