最后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()
不知对不对