Csharp/C Sharp by API/System.Runtime.InteropServices/Marshal

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Marshal.AllocCoTaskMem

<source lang="csharp"> using System; using System.Runtime.InteropServices; class MainClass {

 static void Main(string[] args)
 {
   UsePointers();
 }
 static unsafe public void UsePointers()
 {
   char * pMyArray = (char*)Marshal.AllocCoTaskMem(6);
   while (*pMyArray != "\0")
   {
     Console.WriteLine(*pMyArray);
     pMyArray++;
   }
   Marshal.FreeCoTaskMem((IntPtr)pMyArray);
 }

}


 </source>


Marshal.AllocHGlobal

<source lang="csharp"> using System; using System.Runtime.InteropServices; public class MainClass {

 [STAThread]
 static void Main(string[] args)
 {
   IntPtr ptr = IntPtr.Zero;
   ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)));
   Marshal.FreeHGlobal(ptr);
 }

}

 </source>


Marshal.FreeHGlobal

<source lang="csharp"> using System; using System.IO; using System.Reflection; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; public class MainClass {

   public static void Main()
   {
       IntPtr ptr = Marshal.AllocHGlobal(1024);
       if (ptr != IntPtr.Zero){
               Marshal.FreeHGlobal(ptr);
               ptr = IntPtr.Zero;
       }
   }

}


 </source>


Marshal.StringToCoTaskMemAnsi

<source lang="csharp">

using System; using System.Runtime.InteropServices; using LDAP32; unsafe class MainClass {

 private static uint LDAP_PORT = 389;
 [STAThread]
 static void Main(string[] args)
 {
   LDAP32.LDAP* pLdap = null;
   sbyte* pServer = (sbyte*)Marshal.StringToCoTaskMemAnsi("dsaddom.nttest.microsoft.ru");
   sbyte* pName = (sbyte*)Marshal.StringToCoTaskMemAnsi("CN=Greg MacBeth,CN=Users,DC=dsaddom,DC=nttest,DC=MICROSOFT,DC=COM");
   sbyte* pPassword = (sbyte*)Marshal.StringToCoTaskMemAnsi("gregmcb");
   uint Result = 0;
       pLdap = Wldap32.ldap_init(pServer, LDAP_PORT);
   if(pLdap != null)
   {
     Result = Wldap32.ldap_simple_bind_s(pLdap, pName, pPassword);
   }
   Wldap32.ldap_unbind(pLdap);
 }

}

 </source>