读书人

最后21分了:请问DLL的共享数据段

发布时间: 2012-01-19 00:22:28 作者: rapoo

最后21分了:请教DLL的共享数据段
#pragma data_seg( ".Protect ")
HHOOK g_hHook = NULL;
BOOL g_bHook = FALSE;
DWORD g_dwProtectId = 0;
TCHAR g_szProtect[MAX_PATH] = TEXT( " ");
struct
{
TCHAR szName[50];
TCHAR szId[10];
} Target, *pTarget;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.Protect,RWS ")

上述代码中,为何:
HHOOK g_hHook = NULL;
BOOL g_bHook = FALSE;
DWORD g_dwProtectId = 0;
都可以实现数据共享,而:
TCHAR g_szProtect[MAX_PATH] = TEXT( " ");
struct
{
TCHAR szName[50];
TCHAR szId[10];
} Target, *pTarget;
不行??
在:http://msdn2.microsoft.com/zh-cn/library/h90dkhs0(VS.80).aspx 的介绍里似乎是不能放指针,但TCHAR也不是指针啊。为何不行?

怎么解决呢?只有21分了,请帮个忙。

[解决办法]
你这里是数组,数组在内存中也是以指针的形式传递的。

数组、结构、字符串等在内存中都是以指针的形式传递的,可能是这个原因吧。

[解决办法]
我觉得数组应该没有什么问题
不过结构体应该就有问题了

你加载的DLL是不是同一个?

我看你共享的东西好多
不如用成文件映象
[解决办法]
共享段中的数据作为“数”是可以的,但是作为“地址”,在不同的进程中地址是没有相关性的,不能共享。
[解决办法]
共享数据段应该要初始化
[解决办法]
到msdn上看了一下,http://msdn2.microsoft.com/zh-cn/library/h90dkhs0(VS.80).aspx

发现他是这样写的:
#pragma data_seg ( ".myseg ")
int i = 0;
char a[32]n = "hello world ";
#pragma data_seg()

不知对不对

读书人网 >VC/MFC

热点推荐