相关操作在void指针上未定义。

fxmaster01 2013-04-09 07:17:45
numPtr2 = (byte*) ((((void*) ptr2) + (((height - k) - 1) * stride)) + (m * 4));

这里报错,提示:相关操作在void指针上未定义。

请大家看看怎么回事,咋解决。
...全文
280 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2013-04-10
  • 打赏
  • 举报
回复
引用 5 楼 fxmaster01 的回复:
上面是整个函数
那个就是以前的代码?你用Reflector反编译dll看看,肯定不一样的。
fxmaster01 2013-04-10
  • 打赏
  • 举报
回复
给自己顶一下。
fxmaster01 2013-04-10
  • 打赏
  • 举报
回复
上面是整个函数
qldsrx 2013-04-10
  • 打赏
  • 举报
回复
引用 2 楼 fxmaster01 的回复:
老兄,我不怎么明白,这是以前的程序。以前别人都可以编译成dll,为何我不行呢。
你把以前别人的代码贴出来,否则就是乱说。这里Void指针是不确定类型的,+1倒底地址偏移多少无从得知,比如byte*的+1,地址偏移1位,int*的+1,地址偏移4位,不同的数据类型,偏移量完全不一样。
fxmaster01 2013-04-10
  • 打赏
  • 举报
回复
public unsafe Bitmap Transpose(Bitmap b) { int width = b.Width; int height = b.Height; Bitmap bitmap = new Bitmap(height, width); bitmap.SetResolution(300f, 300f); BitmapData bitmapdata = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); BitmapData data2 = bitmap.LockBits(new Rectangle(0, 0, height, width), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); int stride = bitmapdata.Stride; int num3 = data2.Stride; IntPtr ptr = bitmapdata.Scan0; IntPtr ptr2 = data2.Scan0; int num4 = bitmapdata.Stride - (width * 4); byte* numPtr = (byte*) ptr; byte* numPtr2 = (byte*) ptr2; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { numPtr2 = (byte*) ((((void*) ptr2) + (j * num3)) + (i * 4)); 这段代码提示:“相关操作在void指针上未定义”。 高人给看看这个函数怎么能让他编译通过。 numPtr2[0] = numPtr[0]; numPtr2[1] = numPtr[1]; numPtr2[2] = numPtr[2]; numPtr2[3] = numPtr[3]; numPtr += 4; } numPtr += num4; } bitmap.UnlockBits(data2); b.UnlockBits(bitmapdata); b.Dispose(); return bitmap; }
fxmaster01 2013-04-10
  • 打赏
  • 举报
回复
老兄,我不怎么明白,这是以前的程序。以前别人都可以编译成dll,为何我不行呢。
gomoku 2013-04-10
  • 打赏
  • 举报
回复

Bitmap Transpose(Bitmap b)
{
    b.RotateFlip(RotateFlipType.Rotate90FlipX);
    return b;
}
fxmaster01 2013-04-10
  • 打赏
  • 举报
回复
哦,谢谢您啦,朋友。
qldsrx 2013-04-10
  • 打赏
  • 举报
回复
引用 8 楼 fxmaster01 的回复:
这函数就是我反编译出来的,原来代码找不到了。
那就是反编译软件的BUG了。 numPtr2 = (byte*) ((((void*) ptr2) + (j * num3)) + (i * 4)); 改为 numPtr2 = (byte*)ptr2 + (j * num3) + (i * 4);
fxmaster01 2013-04-10
  • 打赏
  • 举报
回复
这函数就是我反编译出来的,原来代码找不到了。
bigbaldy 2013-04-09
  • 打赏
  • 举报
回复
Void*没法加的,+1是多长? 你换成byte*就可以了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧