读书人

关于fixed关键字的奇怪有关问题

发布时间: 2012-08-28 12:37:01 作者: rapoo

关于fixed关键字的奇怪问题

C# code
            unsafe            {                // read file to buffer and close the file.                FileStream sFile = new FileStream("d:\\Microsoft C Program.doc", FileMode.Open);                long nFileLen = sFile.Length;                byte[] fileData = new byte[nFileLen];                sFile.Read(fileData, 0, (int)nFileLen);                sFile.Close();                // allocate buffer for compressing                int nCompress = 0;                byte[] data = new byte[nFileLen+100];                fixed (byte* pCompress = data, pFile = &fileData)                {                    CheckMem(pFile, nFileLen, pCompress, nFileLen + 100);//pCompress访问出错                    nCompress = Compress2(pFile, nFileLen, pCompress);                }            }


CheckMem和Compress2是C++写的dll导出函数,关于如何调用C++动态库基本上没问题。现在的问题是:
1、如果使用fixed关键字的时候似乎只能fixed一个byte*,无论读写内存都不会有问题。
2、如果使用fixed关键字fixed两个byte*的话,总会有一个byte*所指向的内存无法读写。

请问这是什么原因?如果无法避免这个问题,怎么绕过?我想要的结果就是取得两个类似于C++的指针,然后操作这两个指针所指向的内容。

[解决办法]
问题解决,自己搞定,指针要放前面,不能乱放,COM限制了的。
C# code
    unsafe    {    // read file to buffer and close the file.    FileStream sFile = new FileStream("d:\\Microsoft C Program.doc", FileMode.Open);    long nFileLen = sFile.Length;    byte[] fileData = new byte[nFileLen];    sFile.Read(fileData, 0, (int)nFileLen);    sFile.Close();    IntPtr pData = Marshal.AllocHGlobal((int)nFileLen);    Marshal.Copy(fileData, 0, pData, (int)nFileLen);    int nCompress = 0;    // allocate buffer for compressing    IntPtr pCompress = Marshal.AllocHGlobal((int)(nFileLen+100));    CheckMem(pData, pCompress, nFileLen, nFileLen+100);    } 

读书人网 >C#

热点推荐