讨教一下DLL中的共享数据段的问题

C++语言 码拜 8年前 (2016-09-21) 1603次浏览
近日用到了DLL中的共享数据段,使用LIB文件时可以实现的数据共享,只用DLL文件就不行了!
使用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

讨教一下DLL中的共享数据段的问题

20

帮结帖+蹭分

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明讨教一下DLL中的共享数据段的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)