首页 > 代码库 > C# 中安全代码与不安全代码

C# 中安全代码与不安全代码

C# 中安全代码与不安全代码 P/Invoke

 

非托管代码需要在unsafe块中书写。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace IntPtrSample{    class Program    {        static void Main(string[] args)        {            string stringA = "I seem to be turned around!";            int copylen = stringA.Length;            // Allocate HGlobal memory for source and destination strings            IntPtr sptr = Marshal.StringToHGlobalAnsi(stringA);            IntPtr dptr = Marshal.AllocHGlobal(copylen + 1);            // The unsafe section where byte pointers are used.             unsafe            {                byte* src = http://www.mamicode.com/(byte*)sptr.ToPointer();                byte* dst = (byte*)dptr.ToPointer();                src[0] = (byte)a;                src[1] = (byte)a;                src[2] = (byte)a;                src[3] = (byte)a;                if (copylen > 0)                {                    // set the source pointer to the end of the string                     // to do a reverse copy.                    src += copylen - 1;                    while (copylen-- > 0)                    {                        *dst++ = *src--;                    }                    *dst = 0;                }            }            string stringB = Marshal.PtrToStringAnsi(dptr);            Console.WriteLine("Original:\n{0}\n", stringA);            Console.WriteLine("Reversed:\n{0}", stringB);            // Free HGlobal memory            Marshal.FreeHGlobal(dptr);            Marshal.FreeHGlobal(sptr);        }    }}

 

// 参考文章

http://msdn.microsoft.com/en-us/library/system.intptr.topointer.aspx

http://msdn.microsoft.com/en-us/library/etb4xxec.aspx

C# 中安全代码与不安全代码