IntPtr pby = IntPtr.Zero;
byte[] aa =  new  byte[256]; 
pby=(IntPtr)aa;这样是不行的...

解决方案 »

  1.   

    byte[] buff = new  byte[256]; 
    IntPtr p = Marshal.AllocHGlobal(256);
    Marshal.Copy(buff, 0, p, 256);
    return p;
      

  2.   

    unsafe modebyte[] aa = new byte[256];fixed(byte* lpBuf = aa)
    {
    ...
    }
      

  3.   

    是呀,我就是想要非托管的.请问如何取得非托管内存指针??????
    将一维的托管 8 位无符号整数数组中的数据复制到非托管内存指针。受 .NET Framework 精简版的支持。
    [C#] public static void Copy(byte[], int, IntPtr, int);
      

  4.   

    找到了下面一个函数
    [DllImport("kernel32.dll", SetLastError=true)] 
    static extern int GlobalAlloc ( int wFlags, int dwBytes) ;是不是可以用来分配内存,并且返回一个非托管内存指针呢?然后:
    将一维的托管 8 位无符号整数数组中的数据复制到非托管内存指针。受 .NET Framework 精简版的支持。
    [C#] public static void Copy(byte[], int, IntPtr, int);
    ////////////////////////////////////////////////////////////////不知可以不,
    GlobalAlloc这个又是怎么用的呢?
      

  5.   

    可以用Marshal.AllocHGlobal方法
    public static IntPtr AllocHGlobal(int cb);
    cb是内存块的大小
    返回新分配的内存的 IntPtr。必须使用 Marshal.FreeHGlobal 方法释放此内存。
    然后用Marshal.Copy 方法将数据从托管数组复制到非托管内存指针IntPtr p = Marshal.AllocHGlobal(Marshal.SizeOf(aa));
    Marshal.Copy(aa, 0, p, aa.Length);
      

  6.   

    MSDN的C++扩展编程这章里面有讲...
      

  7.   

    IntPtr p = Marshal.AllocHGlobal(Marshal.SizeOf(aa));
    这个是非托管内存指针吗???自定义资源是在非托管内存中的吗?
    还有,有什么win32 函数可以读取 程序中的自定义资源,其返回的又是否是非托管内存指针???如果我的自定义资源是通过直接编辑已编译好的EXE文件添加的呢?
      

  8.   

    自定义资源,就是不是图片等,
    可以是一个文件,如dll,manifest等
      

  9.   

    unsafe codeunsafe static void getaddress(byte []b)
    {
    fixed(byte *p0=b)
    {
                    byte *p=p0;
    for(int i=0;i<b.Length;i++)
    {

    Console.WriteLine("a[{0}]  地址=0x{1:X}\t值={2}",i,(uint)p,*p);
    p++; } }
    }
    [STAThread]
    static void Main(string[] args)
    {
    byte []a=new byte[]{1,2,3,4,5,6,7,8};
    getaddress(a);
    }