首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-01-19 
最后21分了:请教DLL的共享数据段#pragmadata_seg( .Protect )HHOOKg_hHookNULLBOOLg_bHookFALSEDWOR

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

不知对不对

热点排行