急用!!!C#与VC数据类型转换问题---------请高人指点

qyly 2004-12-09 10:07:51
vc中BYTE* mybyte = new BYTE[10000];通常用来分配内存空间,在C#应该用什么数据类型代替它进行操作,请指点。
还有VC用来分配内存用的函数FillMemory()属于哪个DLL?
可加分,谢谢!
...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qyly 2004-12-19
  • 打赏
  • 举报
回复
谢谢ggl165(ggl165) !!!

又出现新问题,程序运行几分钟后,出现SEHException(结构错误)要么出现Nullexception(未引用实例)这可怎么办呀?无法指向相应的代码呀!!!
请问是什么原因引起的呢?结构中这句public IntPtr bmiColors;用指针代结构可以么?
qyly 2004-12-19
  • 打赏
  • 举报
回复
谢谢ggl165(ggl165) !!!

程序运行几分钟后,出现SEHException(结构错误)或Nullexception(未引用实例)这可怎么办呀?无法指向相应的代码呀!!!
请问是什么原因引起的呢?结构中这句public IntPtr bmiColors;用指针代结构可以么?
ggl165 2004-12-16
  • 打赏
  • 举报
回复
1.定义BITMAPINFO类型
[StructLayout(LayoutKind.Sequential)]
public class BITMAPINFOHEADER
{
[FieldOffset(0)]
public Int32 biSize;
[FieldOffset(4)]
public Int32 biWidth;
[FieldOffset(8)]
public Int32 biHeight;
[FieldOffset(12)]
public Int16 biPlanes;
[FieldOffset(14)]
public Int16 biBitCount;
[FieldOffset(16)]
public Int32 biCompression;
[FieldOffset(20)]
public Int32 biSizeImage;
[FieldOffset(24)]
public Int32 biXPelsPerMeter;
[FieldOffset(28)]
public Int32 biYPelsPerMeter;
[FieldOffset(32)]
public Int32 biClrUsed;
[FieldOffset(36)]
public Int32 biClrImportant;
}

[StructLayout(LayoutKind.Sequential)]
public class BITMAPINFO
{
public BITMAPINFOHEADER bmiHeader;
public IntPtr bmiColors;
}
2.
int size = Marshal.SizeOf(typeof(BITMAPINFO));
3.IntPtr ptrBitMap = Marshal.AllocCoTaskMem(size );
4.BITMAPINFO mybitmap = (BITMAPINFO Marshal.PtrToStructure(ptrBitMap, typeof(BITMAPINFO));

看看行不行
qyly 2004-12-16
  • 打赏
  • 举报
回复
请高人帮忙,马上结贴!!!
jimh 2004-12-14
  • 打赏
  • 举报
回复
直接使用 BITMAPINFO mybitmap = new BITMAPINFO() 就可以。
qyly 2004-12-14
  • 打赏
  • 举报
回复
多谢zhoutler(笑熬浆糊) !
请问我用
char* mychar = new char[2048];
BITMAPINFO mybitmap = new BITMAPINFO;//BITMAPINFO是VC中定义的一个存储BITBMP信息的一个结构。
mybitmap = (BITMAPINFO*)mychar ;


请问上面的语句我用C#怎么实现?还有你说的unsafe代码内存回收能否讲的详细一点,推荐篇文章也好!谢谢!

qyly 2004-12-14
  • 打赏
  • 举报
回复
没有那么简单,实际上是让mybitmap和mychar指向相同的地址,类型不同很难办。
cxyPioneer 2004-12-10
  • 打赏
  • 举报
回复
up
支持中文哦 2004-12-09
  • 打赏
  • 举报
回复
提醒你:
在C#中,数组是引用类型哦!意味着数组本身就是在heap上分配的。这个与struct不同,它是值类型,在stack上分配.
C#中有基本数据类型byte,表示无符号的8位整数呢.
对于你需要显式的进行内存分配:
1.堆栈分配 stackalloc();函数
不能显式释放该函数申请的空间,而且该空间不受垃圾回收器管理.函数返回结束,自动释放空间
2.动态内存分配 HeapAlloc //当然从kernel32导入的dll函数
完全需要程序员对内存空间负责.
以上代码应该都是 unsafe代码.而且C#规定指针只能指向诸如int,short,long ,double,enum等非托管类型,任何指向引用类型都是错误的.与引用类型不同,指针不受垃圾回收器跟踪的哦.程序员要负责到底.
isaacyh 2004-12-09
  • 打赏
  • 举报
回复
C#好像就是用
byte[] temp = new byte[10000];
来代替的,它好像没有堆分配的概念。

它这样写分配的空间有垃圾收集机制来释放这些内存。不用自己释放。

110,539

社区成员

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

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

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