首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-08-28 
关于fixed关键字的奇怪问题C# codeunsafe{// read file to buffer and close the file.FileStream sFile

关于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);    } 

热点排行