00001 using System;
00002 using System.Collections;
00003 using System.Runtime.InteropServices;
00004
00005 namespace SQLiteCSLib.Inner
00006 {
00010 public class StringFromC
00011 {
00017 unsafe static public string String( void* str )
00018 {
00019 IntPtr ValPtr = new IntPtr( str );
00020 #if MOBILEPC
00021 return Marshal.PtrToStringUni( ValPtr );
00022 #else
00023 return Marshal.PtrToStringAuto( ValPtr );
00024 #endif
00025 }
00026
00032 unsafe static public string String( IntPtr ValPtr )
00033 {
00034 #if MOBILEPC
00035 return Marshal.PtrToStringUni( ValPtr );
00036 #else
00037 return Marshal.PtrToStringAuto( ValPtr );
00038 #endif
00039 }
00040
00046 unsafe static public string StringAnsi( IntPtr ValPtr )
00047 {
00048 #if MOBILEPC
00049 ArrayList ansistr = new ArrayList();
00050 int iTop = ValPtr.ToInt32();
00051
00052 while( true )
00053 {
00054 IntPtr pPos = new IntPtr(iTop++);
00055 byte bBin = Marshal.ReadByte( pPos );
00056 if( bBin == 0x00 )
00057 {
00058 break;
00059 }
00060
00061 ansistr.Add( bBin );
00062 }
00063
00064 byte[] ansibin = ansistr.ToArray( typeof(byte) ) as byte[];
00065 System.Text.Decoder dec = System.Text.Encoding.ASCII.GetDecoder();
00066 int iLen = ansibin.Length;
00067 char[] cChars= new char[iLen];
00068 dec.GetChars(ansibin,0,iLen, cChars, 0 );
00069 return new string(cChars);
00070 #else
00071 return Marshal.PtrToStringAnsi( ValPtr );
00072 #endif
00073 }
00074
00081 unsafe static public string String( void* str, int isize )
00082 {
00083 IntPtr ValPtr = new IntPtr( str );
00084 #if MOBILEPC
00085 return Marshal.PtrToStringUni( ValPtr, isize );
00086 #else
00087 return Marshal.PtrToStringAuto( ValPtr, isize );
00088 #endif
00089 }
00090
00097 unsafe static public string String( IntPtr ValPtr, int isize )
00098 {
00099 #if MOBILEPC
00100 return Marshal.PtrToStringUni( ValPtr, isize );
00101 #else
00102 return Marshal.PtrToStringAuto( ValPtr, isize );
00103 #endif
00104 }
00105 }
00106 }