首页
社区
课程
招聘
[求助]一个C++指针处理的问题
发表于: 2007-3-12 11:18 3416

[求助]一个C++指针处理的问题

2007-3-12 11:18
3416
LPVOID p;
p = ::GlobalLock(hMemory);

我希望将指针向后移动 0x3c个字节;请问该怎么做

我尝试了一下 总是不对

(BYTE*)p = (BYTE*)p+ 0x5c; //left operand must be l-value
左操作数不能赋值

p = p + 0x5c; //'void *' : unknown size

见笑了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
2
static_cast<BYTE*>(pMemory2) = static_cast<BYTE*>(pMemory2) + 0x3c;  //这样也会出错
error C2106: '=' : left operand must be l-value
2007-3-12 11:51
0
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
3
BYTE* pp;
        pp = static_cast<BYTE*>(pMemory) + 0x3c;
        pMemory = (LPVOID)pp;
这样写的话编译通过 (通过一个中间变量)

哪位知道更好的方法 或者 知道上楼为什么错 请赐教 谢谢
2007-3-12 12:04
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
调试一下,看看编译器是怎么编译你的代码,你便知道出错的原因了。

因为你使用的是别人的编译器,所以你只能遵守别人的规则。按照别人的语法来做。

一些想法,你不曾做过的,内联汇编来实现吧

这也是我总是学不会C语言的原因,写出来的代码,根本不知道编译器是否按照我想的去编译成汇编代码。
2007-3-12 14:31
0
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
5
这是编译通不过 不是执行的时候出问题  跟本没有链接成可执行文件  
我还没有那能力调试VC++编译器 这只是语法问题 我搞不懂为什么写成一句错 而加了中间变量就对了
2007-3-12 14:52
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
把自己想成是C++的开发者,而不是C++的使用者

或者你就会明白为什么不允许这种修改了
2007-3-12 14:59
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
p = (LPVOID)ULongToPtr(PtrToUlong(p) + 0x3C);

PtrToUlong,ULongToPtr是宏

#define PtrToUlong( p ) ((ULONG)(ULONG_PTR) (p) )
#define ULongToPtr( ul ) ((VOID *)(ULONG_PTR)((unsigned long)ul))
2007-3-12 17:42
0
游客
登录 | 注册 方可回帖
返回
//