コード例 #1
0
 public static IEnumerable <TokenInfo> GetTokens(string text, params char[] separators)
 {
     unsafe
     {
         string *ptr = null;
     }
 }
コード例 #2
0
        static void Main(string[] args)
        {
            string *a = "Hello";
            string  b = "Hello";

            int aAdd = &a;

            Console.WriteLine("{0}", &a);
            Console.WriteLine("{0}", &b);
        }
コード例 #3
0
        public unsafe bool WriteEvent(ref EventDescriptor eventDescriptor, EventTraceActivity eventTraceActivity, string data)
        {
            uint   num   = 0;
            string str   = data;
            string empty = str;

            if (str == null)
            {
                empty = string.Empty;
            }
            data = empty;
            if (this.IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords))
            {
                if (data.Length <= 0x7fd4)
                {
                    if (eventTraceActivity != null)
                    {
                        DiagnosticsEventProvider.SetActivityId(ref eventTraceActivity.ActivityId);
                    }
                    UnsafeNativeMethods.EventData length;
                    length.Size     = (data.Length + 1) * 2;
                    length.Reserved = 0;
                    fixed(string str1 = data)
                    {
                        string *strPointers        = &str1;
                        char *  offsetToStringData = (char *)(&str1);

                        if (&str1 != null)
                        {
                            offsetToStringData = (char *)(strPointers + RuntimeHelpers.OffsetToStringData);
                        }
                        length.DataPointer = (ulong)offsetToStringData;
                        num = UnsafeNativeMethods.EventWrite(this.traceRegistrationHandle, ref eventDescriptor, 1, ref length);
                    }
                }
                else
                {
                    DiagnosticsEventProvider.errorCode = DiagnosticsEventProvider.WriteEventErrorCode.EventTooBig;
                    return(false);
                }
            }
            if (num == 0)
            {
                return(true);
            }
            else
            {
                DiagnosticsEventProvider.SetLastError(num);
                return(false);
            }
        }
コード例 #4
0
        public static unsafe SecureString ToSecureString(this string unsecureString)
        {
            if (unsecureString == null)
            {
                return(null);
            }

            fixed(string str = unsecureString)
            {
                string *offsetToStringData = &str;

                if (offsetToStringData != null)
                {
                    offsetToStringData = offsetToStringData + RuntimeHelpers.OffsetToStringData;
                }
                SecureString secureString = new SecureString((char *)offsetToStringData, unsecureString.Length);

                secureString.MakeReadOnly();
                return(secureString);
            }
        }
コード例 #5
0
ファイル: XmlNode.cs プロジェクト: crashracer/EasyTerm
        // ********************************************************************************
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <param name="CMap<int"></param>
        /// <param name="enummap"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        /// <created>UPh,11.11.2013</created>
        /// <changed>UPh,11.11.2013</changed>
        // ********************************************************************************

        /* TODO
         *
         * bool GetEnumAttribute(string name, XmlEnumMap &enummap, int *value)
         * {
         *  TCHAR text[80] = _T("");
         *  if (GetAttribute(name, text, _countof(text)))
         *  {
         *      for (std::pair<string, int> c : enummap)
         *      {
         *          if (_tcscmp(c.first, text) == 0)
         *          {
         * value = c.second;
         *              return true;
         *          }
         *      }
         *
         *      if (_istdigit(text[0]))
         *      {
         * value = _ttoi(text);
         *          return true;
         *      }
         *
         *      ASSERT(0); // invalid enum
         *  }
         *
         * value = 0;
         *  return false;
         * }
         */

        // ********************************************************************************
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        /// <created>UPh,01.04.2014</created>
        /// <changed>UPh,01.04.2014</changed>
        // ********************************************************************************

        /* TODO
         * bool GetTimeAttribute(string name, CFileTime *time)
         * {
         *  TCHAR text[80] = _T("");
         *  if (GetAttribute(name, text, _countof(text)))
         *  {
         *      CTMFileTime t;
         *      if (t.ScanIsoDateTime(text, true))
         *      {
         *          time.SetTime(t.m_Int);
         *          return true;
         *      }
         *  }
         *
         *  time.SetTime(0);
         *  return false;
         * }
         */

#if false
        //********************************************************************************
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <param name="value"></param>
        /// <param name="def"></param>
        /// <returns></returns>
        /// <created>UPh,08.04.2013</created>
        /// <changed>UPh,08.04.2013</changed>
        //********************************************************************************
        bool SerializeAttribute(string name, string *value, string def /*= null*/)
        {
            if (IsReading())
            {
                if (def == null)
                {
                    def = _T("");
                }
                if (!GetAttribute(name, value))
                {
                    *value = def;
                }
                return(true);
            }
            else if (IsWriting())
            {
                WriteAttribute(name, *value);
                return(true);
            }
            return(false);
        }
コード例 #6
0
ファイル: Unmanaged.cs プロジェクト: tppApe/UfcppSample
        static void Main()
        {
            var point = new Point {
                X = 1, Y = 2, Z = 2
            };

#if Uncompilable
            string s = "abc";
#endif

            unsafe
            {
                // ジェネリックでなければ、Point は元からポインター化可能。
                Point *p = &point;

#if Uncompilable
                // これはダメ。
                // 参照型のポインターは作れない。
                string *ps = &s;
#endif
            }

            MemSet0(ref point);
            Console.WriteLine(point); // (0, 0, 0)

#if Uncompilable
            // これはダメ。
            // MemSet0<T> の T に unmanaged  制約が付いてるので、string では呼べない
            MemSet0(ref s);
#endif

#if Uncompilable
            // これもダメ。
            // unmanaged な型だけを含む構造体なので、原理的にはポインター化しても安全なんだけど。
            // 再帰的なジェネリック型に対して安全保証するのはメリットの割に大変らしく、断念したとのこと。
            var kv = new KeyValuePair <int, Point>(1, point);
            MemSet0(ref kv);
#endif
        }
コード例 #7
0
        public unsafe bool WriteMessageEvent(string eventMessage, byte eventLevel, long eventKeywords)
        {
            int num = 0;

            if (eventMessage == null)
            {
                throw Fx.Exception.AsError(new ArgumentNullException("eventMessage"), null);
            }
            if (this.IsEnabled(eventLevel, eventKeywords))
            {
                if (eventMessage.Length > 32724)
                {
                    DiagnosticsEventProvider.errorCode = DiagnosticsEventProvider.WriteEventErrorCode.EventTooBig;
                    return(false);
                }

                fixed(string str = eventMessage)
                {
                    string *offsetToStringData = &str;

                    if (offsetToStringData != null)
                    {
                        offsetToStringData = offsetToStringData + RuntimeHelpers.OffsetToStringData;
                    }
                    char *chrPointer = (char *)offsetToStringData;

                    num = (int)UnsafeNativeMethods.EventWriteString(this.traceRegistrationHandle, eventLevel, eventKeywords, chrPointer);
                }

                if (num != 0)
                {
                    DiagnosticsEventProvider.SetLastError(num);
                    return(false);
                }
            }
            return(true);
        }
コード例 #8
0
        public unsafe bool WriteMessageEvent(EventTraceActivity eventTraceActivity, string eventMessage, byte eventLevel, long eventKeywords)
        {
            if (eventMessage != null)
            {
                if (eventTraceActivity != null)
                {
                    DiagnosticsEventProvider.SetActivityId(ref eventTraceActivity.ActivityId);
                }
                if (this.IsEnabled(eventLevel, eventKeywords))
                {
                    if (eventMessage.Length <= 0x7fd4)
                    {
                        fixed(string str = eventMessage)
                        {
                            string *strPointers        = &str;
                            char *  offsetToStringData = (char *)(&str);

                            if (&str != null)
                            {
                                offsetToStringData = (char *)(strPointers + RuntimeHelpers.OffsetToStringData);
                            }
                            int num = UnsafeNativeMethods.EventWriteString(this.traceRegistrationHandle, eventLevel, eventKeywords, offsetToStringData);
                        }
                    }
                    else
                    {
                        DiagnosticsEventProvider.errorCode = DiagnosticsEventProvider.WriteEventErrorCode.EventTooBig;
                        return(false);
                    }
                }
                return(true);
            }
            else
            {
                throw Fx.Exception.AsError(new ArgumentNullException("eventMessage"));
            }
        }
コード例 #9
0
        public unsafe bool WriteEvent(ref EventDescriptor eventDescriptor, string data)
        {
            UnsafeNativeMethods.EventData length = new UnsafeNativeMethods.EventData();
            uint num = 0;

            data = data ?? string.Empty;
            if (this.IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords))
            {
                if (data.Length > 32724)
                {
                    DiagnosticsEventProvider.errorCode = DiagnosticsEventProvider.WriteEventErrorCode.EventTooBig;
                    return(false);
                }
                Guid activityId = DiagnosticsEventProvider.GetActivityId();
                DiagnosticsEventProvider.SetActivityId(ref activityId);
                length.Size     = (uint)((data.Length + 1) * 2);
                length.Reserved = 0;
                fixed(string str = data)
                {
                    string *offsetToStringData = &str;

                    if (offsetToStringData != null)
                    {
                        offsetToStringData = offsetToStringData + RuntimeHelpers.OffsetToStringData;
                    }
                    length.DataPointer = (ulong)((char *)offsetToStringData);
                    num = UnsafeNativeMethods.EventWrite(this.traceRegistrationHandle, ref eventDescriptor, 1, ref length);
                }
            }
            if (num == 0)
            {
                return(true);
            }
            DiagnosticsEventProvider.SetLastError((int)num);
            return(false);
        }
コード例 #10
0
        public unsafe bool WriteTransferEvent(ref EventDescriptor eventDescriptor, Guid relatedActivityId, params object[] eventPayload)
        {
            uint num = 0;

            if (this.IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords))
            {
                Guid activityId = DiagnosticsEventProvider.GetActivityId();
                if (eventPayload == null || (int)eventPayload.Length == 0)
                {
                    num = UnsafeNativeMethods.EventWriteTransfer(this.traceRegistrationHandle, ref eventDescriptor, ref activityId, ref relatedActivityId, 0, 0);
                }
                else
                {
                    int length = (int)eventPayload.Length;
                    if (length > 32)
                    {
                        throw Fx.Exception.AsError(new ArgumentOutOfRangeException("eventPayload", SRCore.EtwMaxNumberArgumentsExceeded(32)), null);
                    }
                    uint     size      = 0;
                    int      num1      = 0;
                    int[]    numArray  = new int[8];
                    string[] strArrays = new string[8];
                    UnsafeNativeMethods.EventData *eventDataPointer  = stackalloc UnsafeNativeMethods.EventData[checked (length * sizeof(UnsafeNativeMethods.EventData))];
                    UnsafeNativeMethods.EventData *eventDataPointer1 = eventDataPointer;
                    byte *numPointer = stackalloc byte[16 * length];
                    for (int i = 0; i < (int)eventPayload.Length; i++)
                    {
                        if (eventPayload[i] != null)
                        {
                            string str = DiagnosticsEventProvider.EncodeObject(ref eventPayload[i], eventDataPointer1, numPointer);
                            numPointer        = numPointer + 16;
                            size              = size + (*eventDataPointer1).Size;
                            eventDataPointer1 = eventDataPointer1 + sizeof(UnsafeNativeMethods.EventData);
                            if (str != null)
                            {
                                if (num1 >= 8)
                                {
                                    throw Fx.Exception.AsError(new ArgumentOutOfRangeException("eventPayload", SRCore.EtwAPIMaxStringCountExceeded(8)), null);
                                }
                                strArrays[num1] = str;
                                numArray[num1]  = i;
                                num1++;
                            }
                        }
                    }
                    if (size > 65482)
                    {
                        DiagnosticsEventProvider.errorCode = DiagnosticsEventProvider.WriteEventErrorCode.EventTooBig;
                        return(false);
                    }

                    fixed(string str1 = strArrays[0])
                    {
                        string *offsetToStringData = &str1;

                        if (offsetToStringData != null)
                        {
                            offsetToStringData = offsetToStringData + RuntimeHelpers.OffsetToStringData;
                        }
                        char *chrPointer = (char *)offsetToStringData;

                        fixed(string str2 = strArrays[1])
                        {
                            string *strPointers = &str2;

                            if (strPointers != null)
                            {
                                strPointers = strPointers + RuntimeHelpers.OffsetToStringData;
                            }
                            char *chrPointer1 = (char *)strPointers;

                            fixed(string str3 = strArrays[2])
                            {
                                string *offsetToStringData1 = &str3;

                                if (offsetToStringData1 != null)
                                {
                                    offsetToStringData1 = offsetToStringData1 + RuntimeHelpers.OffsetToStringData;
                                }
                                char *chrPointer2 = (char *)offsetToStringData1;

                                fixed(string str4 = strArrays[3])
                                {
                                    string *strPointers1 = &str4;

                                    if (strPointers1 != null)
                                    {
                                        strPointers1 = strPointers1 + RuntimeHelpers.OffsetToStringData;
                                    }
                                    char *chrPointer3 = (char *)strPointers1;

                                    fixed(string str5 = strArrays[4])
                                    {
                                        string *offsetToStringData2 = &str5;

                                        if (offsetToStringData2 != null)
                                        {
                                            offsetToStringData2 = offsetToStringData2 + RuntimeHelpers.OffsetToStringData;
                                        }
                                        char *chrPointer4 = (char *)offsetToStringData2;

                                        fixed(string str6 = strArrays[5])
                                        {
                                            string *strPointers2 = &str6;

                                            if (strPointers2 != null)
                                            {
                                                strPointers2 = strPointers2 + RuntimeHelpers.OffsetToStringData;
                                            }
                                            char *chrPointer5 = (char *)strPointers2;

                                            fixed(string str7 = strArrays[6])
                                            {
                                                string *offsetToStringData3 = &str7;

                                                if (offsetToStringData3 != null)
                                                {
                                                    offsetToStringData3 = offsetToStringData3 + RuntimeHelpers.OffsetToStringData;
                                                }
                                                char *chrPointer6 = (char *)offsetToStringData3;

                                                fixed(string str8 = strArrays[7])
                                                {
                                                    string *strPointers3 = &str8;

                                                    if (strPointers3 != null)
                                                    {
                                                        strPointers3 = strPointers3 + RuntimeHelpers.OffsetToStringData;
                                                    }
                                                    char *chrPointer7 = (char *)strPointers3;

                                                    eventDataPointer1 = eventDataPointer;
                                                    if (strArrays[0] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[0] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer;
                                                    }
                                                    if (strArrays[1] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[1] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer1;
                                                    }
                                                    if (strArrays[2] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[2] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer2;
                                                    }
                                                    if (strArrays[3] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[3] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer3;
                                                    }
                                                    if (strArrays[4] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[4] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer4;
                                                    }
                                                    if (strArrays[5] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[5] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer5;
                                                    }
                                                    if (strArrays[6] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[6] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer6;
                                                    }
                                                    if (strArrays[7] != null)
                                                    {
                                                        (*(eventDataPointer1 + numArray[7] * sizeof(UnsafeNativeMethods.EventData))).DataPointer = (ulong)chrPointer7;
                                                    }
                                                    num = UnsafeNativeMethods.EventWriteTransfer(this.traceRegistrationHandle, ref eventDescriptor, ref activityId, ref relatedActivityId, (uint)length, eventDataPointer);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    str2 = null;
                    str3 = null;
                    str4 = null;
                    str5 = null;
                    str6 = null;
                    str7 = null;
                    str8 = null;
                }
            }
            if (num == 0)
            {
                return(true);
            }
            DiagnosticsEventProvider.SetLastError((int)num);
            return(false);
        }
コード例 #11
0
        internal static unsafe int InitializeSecurityContext(SafeFreeCredentials inCredentials, ref SafeDeleteContext refContext, string targetName, SspiContextFlags inFlags, Endianness endianness, SecurityBuffer inSecBuffer, SecurityBuffer[] inSecBuffers, SecurityBuffer outSecBuffer, ref SspiContextFlags outFlags)
        {
            IntPtr *intPtrPointer;
            IntPtr *intPtrPointer1;

            if (inCredentials == null)
            {
                throw new ArgumentNullException("inCredentials");
            }
            SecurityBufferDescriptor securityBufferDescriptor = null;

            if (inSecBuffer != null)
            {
                securityBufferDescriptor = new SecurityBufferDescriptor(1);
            }
            else if (inSecBuffers != null)
            {
                securityBufferDescriptor = new SecurityBufferDescriptor((int)inSecBuffers.Length);
            }
            SecurityBufferDescriptor securityBufferDescriptor1 = new SecurityBufferDescriptor(1);
            bool       flag       = ((inFlags & SspiContextFlags.AllocateMemory) != SspiContextFlags.Zero ? true : false);
            int        num        = -1;
            SSPIHandle sSPIHandle = new SSPIHandle();

            if (refContext != null)
            {
                sSPIHandle = refContext._handle;
            }
            GCHandle[]            gCHandleArray         = null;
            GCHandle              gCHandle              = new GCHandle();
            SafeFreeContextBuffer safeFreeContextBuffer = null;

            try
            {
                gCHandle = GCHandle.Alloc(outSecBuffer.token, GCHandleType.Pinned);
                SecurityBufferStruct[] zero = new SecurityBufferStruct[(securityBufferDescriptor == null ? 1 : securityBufferDescriptor.Count)];
                try
                {
                    SecurityBufferStruct[] securityBufferStructArray  = zero;
                    SecurityBufferStruct[] securityBufferStructArray1 = securityBufferStructArray;
                    if (securityBufferStructArray == null || (int)securityBufferStructArray1.Length == 0)
                    {
                        intPtrPointer = null;
                    }
                    else
                    {
                        intPtrPointer = &securityBufferStructArray1[0];
                    }
                    if (securityBufferDescriptor != null)
                    {
                        securityBufferDescriptor.UnmanagedPointer = (void *)intPtrPointer;
                        gCHandleArray = new GCHandle[securityBufferDescriptor.Count];
                        for (int i = 0; i < securityBufferDescriptor.Count; i++)
                        {
                            SecurityBuffer securityBuffer = (inSecBuffer != null ? inSecBuffer : inSecBuffers[i]);
                            if (securityBuffer != null)
                            {
                                zero[i].count = securityBuffer.size;
                                zero[i].type  = securityBuffer.type;
                                if (securityBuffer.unmanagedToken != null)
                                {
                                    zero[i].token = securityBuffer.unmanagedToken.DangerousGetHandle();
                                }
                                else if (securityBuffer.token == null || (int)securityBuffer.token.Length == 0)
                                {
                                    zero[i].token = IntPtr.Zero;
                                }
                                else
                                {
                                    gCHandleArray[i] = GCHandle.Alloc(securityBuffer.token, GCHandleType.Pinned);
                                    zero[i].token    = Marshal.UnsafeAddrOfPinnedArrayElement(securityBuffer.token, securityBuffer.offset);
                                }
                            }
                        }
                    }
                    SecurityBufferStruct[] zero1 = new SecurityBufferStruct[1];
                    try
                    {
                        SecurityBufferStruct[] securityBufferStructArray2 = zero1;
                        SecurityBufferStruct[] securityBufferStructArray3 = securityBufferStructArray2;
                        if (securityBufferStructArray2 == null || (int)securityBufferStructArray3.Length == 0)
                        {
                            intPtrPointer1 = null;
                        }
                        else
                        {
                            intPtrPointer1 = &securityBufferStructArray3[0];
                        }
                        securityBufferDescriptor1.UnmanagedPointer = (void *)intPtrPointer1;
                        zero1[0].count = outSecBuffer.size;
                        zero1[0].type  = outSecBuffer.type;
                        if (outSecBuffer.token == null || (int)outSecBuffer.token.Length == 0)
                        {
                            zero1[0].token = IntPtr.Zero;
                        }
                        else
                        {
                            zero1[0].token = Marshal.UnsafeAddrOfPinnedArrayElement(outSecBuffer.token, outSecBuffer.offset);
                        }
                        if (flag)
                        {
                            safeFreeContextBuffer = SafeFreeContextBuffer.CreateEmptyHandle();
                        }
                        if (refContext == null || refContext.IsInvalid)
                        {
                            refContext = new SafeDeleteContext();
                        }
                        if (targetName == null || targetName.Length == 0)
                        {
                            targetName = " ";
                        }
                        try
                        {
                            fixed(string str = targetName)
                            {
                                string *offsetToStringData = &str;

                                if (offsetToStringData != null)
                                {
                                    offsetToStringData = offsetToStringData + RuntimeHelpers.OffsetToStringData;
                                }
                                char *chrPointer = (char *)offsetToStringData;

                                num = SafeDeleteContext.MustRunInitializeSecurityContext(inCredentials, (sSPIHandle.IsZero ? (void *)0 : (void *)(&sSPIHandle)), ((object)targetName == (object)" " ? (byte *)0 : (byte *)chrPointer), inFlags, endianness, securityBufferDescriptor, refContext, securityBufferDescriptor1, ref outFlags, safeFreeContextBuffer);
                            }
                        }
                        finally
                        {
                            str = null;
                        }
                        outSecBuffer.size = zero1[0].count;
                        outSecBuffer.type = zero1[0].type;
                        if (outSecBuffer.size <= 0)
                        {
                            outSecBuffer.token = null;
                        }
                        else
                        {
                            outSecBuffer.token = new byte[outSecBuffer.size];
                            Marshal.Copy(zero1[0].token, outSecBuffer.token, 0, outSecBuffer.size);
                        }
                    }
                    finally
                    {
                        intPtrPointer1 = null;
                    }
                }
                finally
                {
                    intPtrPointer = null;
                }
            }
            finally
            {
                if (gCHandleArray != null)
                {
                    for (int j = 0; j < (int)gCHandleArray.Length; j++)
                    {
                        if (gCHandleArray[j].IsAllocated)
                        {
                            gCHandleArray[j].Free();
                        }
                    }
                }
                if (gCHandle.IsAllocated)
                {
                    gCHandle.Free();
                }
                if (safeFreeContextBuffer != null)
                {
                    safeFreeContextBuffer.Close();
                }
            }
            return(num);
        }
コード例 #12
0
        void ParseProgram()
        {
            string p;

            if (!this.stateProgram || !*this.stateProgram)
            {
                return;
            }
            if (_interpreterData)   // previous script
            {
                delete(TrainInterpreterData) _interpreterData;
            }
            _interpreterData = new TrainInterpreterData;

            TrainInterpreterData *interp = (TrainInterpreterData *)_interpreterData;

            p = this.stateProgram;
            while (*p)
            {
                const string *p1 = p;
                while (*p1 == ' ' || *p1 == '\t' || *p1 == '\r' || *p1 == '\n')
                {
                    ++p1;
                }
                p = p1;
                if (match(&p, wxPorting.T("OnInit:")))
                {
                    p1             = p;
                    interp._onInit = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnEntry:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onEntry = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnExit:")))
                {
                    p              = next_token(p);
                    p1             = p;
                    interp._onExit = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnStop:")))
                {
                    p              = next_token(p);
                    p1             = p;
                    interp._onStop = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnWaiting:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onWaiting = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnStart:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onStart = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnAssign:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onAssign = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnArrived:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onArrived = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnReverse:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onReverse = ParseStatements(&p);
                }
                else if (match(&p, wxPorting.T("OnShunt:")))
                {
                    p  = next_token(p);
                    p1 = p;
                    interp._onShunt = ParseStatements(&p);
                }
                if (p1 == p) // error! couldn't parse token
                {
                    break;
                }
            }
        }
コード例 #13
0
        public unsafe bool WriteTransferEvent(ref EventDescriptor eventDescriptor, EventTraceActivity eventTraceActivity, Guid relatedActivityId, object[] eventPayload)
        {
            if (eventTraceActivity == null)
            {
                eventTraceActivity = EventTraceActivity.Empty;
            }
            uint num = 0;

            if (this.IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords))
            {
                if (eventPayload == null || (int)eventPayload.Length == 0)
                {
                    num = UnsafeNativeMethods.EventWriteTransfer(this.traceRegistrationHandle, ref eventDescriptor, ref eventTraceActivity.ActivityId, ref relatedActivityId, 0, 0);
                }
                else
                {
                    int length = (int)eventPayload.Length;
                    if (length <= 32)
                    {
                        uint     size      = 0;
                        int      num1      = 0;
                        int[]    numArray  = new int[8];
                        string[] strArrays = new string[8];
                        UnsafeNativeMethods.EventData *eventDataPointer  = (UnsafeNativeMethods.EventData *)length * sizeof(UnsafeNativeMethods.EventData);
                        UnsafeNativeMethods.EventData *eventDataPointer1 = eventDataPointer;
                        byte *numPointer  = (byte *)16 * length;
                        byte *numPointer1 = numPointer;
                        for (int i = 0; i < (int)eventPayload.Length; i++)
                        {
                            if (eventPayload[i] != null)
                            {
                                string str = DiagnosticsEventProvider.EncodeObject(ref eventPayload[i], eventDataPointer1, numPointer1);
                                numPointer1       = numPointer1 + 16;
                                size              = size + (*(eventDataPointer1)).Size;
                                eventDataPointer1 = (UnsafeNativeMethods.EventData *)(eventDataPointer1 + sizeof(UnsafeNativeMethods.EventData));
                                if (str != null)
                                {
                                    if (num1 >= 8)
                                    {
                                        throw Fx.Exception.AsError(new ArgumentOutOfRangeException("eventPayload", InternalSR.EtwAPIMaxStringCountExceeded(8)));
                                    }
                                    else
                                    {
                                        strArrays[num1] = str;
                                        numArray[num1]  = i;
                                        num1++;
                                    }
                                }
                            }
                        }
                        if (size <= 0xffca)
                        {
                            fixed(string str1 = strArrays[0])
                            {
                                string *strPointers        = &str1;
                                char *  offsetToStringData = (char *)(&str1);

                                if (&str1 != null)
                                {
                                    offsetToStringData = (char *)(strPointers + RuntimeHelpers.OffsetToStringData);
                                }
                                char *chrPointer = offsetToStringData;

                                fixed(string str2 = strArrays[1])
                                {
                                    string *strPointers1        = &str2;
                                    char *  offsetToStringData1 = (char *)(&str2);

                                    if (&str2 != null)
                                    {
                                        offsetToStringData1 = (char *)(strPointers1 + RuntimeHelpers.OffsetToStringData);
                                    }
                                    char *chrPointer1 = offsetToStringData1;

                                    fixed(string str3 = strArrays[2])
                                    {
                                        string *strPointers2        = &str3;
                                        char *  offsetToStringData2 = (char *)(&str3);

                                        if (&str3 != null)
                                        {
                                            offsetToStringData2 = (char *)(strPointers2 + RuntimeHelpers.OffsetToStringData);
                                        }
                                        char *chrPointer2 = offsetToStringData2;

                                        fixed(string str4 = strArrays[3])
                                        {
                                            string *strPointers3        = &str4;
                                            char *  offsetToStringData3 = (char *)(&str4);

                                            if (&str4 != null)
                                            {
                                                offsetToStringData3 = (char *)(strPointers3 + RuntimeHelpers.OffsetToStringData);
                                            }
                                            char *chrPointer3 = offsetToStringData3;

                                            fixed(string str5 = strArrays[4])
                                            {
                                                string *strPointers4        = &str5;
                                                char *  offsetToStringData4 = (char *)(&str5);

                                                if (&str5 != null)
                                                {
                                                    offsetToStringData4 = (char *)(strPointers4 + RuntimeHelpers.OffsetToStringData);
                                                }
                                                char *chrPointer4 = offsetToStringData4;

                                                fixed(string str6 = strArrays[5])
                                                {
                                                    string *strPointers5        = &str6;
                                                    char *  offsetToStringData5 = (char *)(&str6);

                                                    if (&str6 != null)
                                                    {
                                                        offsetToStringData5 = (char *)(strPointers5 + RuntimeHelpers.OffsetToStringData);
                                                    }
                                                    char *chrPointer5 = offsetToStringData5;

                                                    fixed(string str7 = strArrays[6])
                                                    {
                                                        string *strPointers6        = &str7;
                                                        char *  offsetToStringData6 = (char *)(&str7);

                                                        if (&str7 != null)
                                                        {
                                                            offsetToStringData6 = (char *)(strPointers6 + RuntimeHelpers.OffsetToStringData);
                                                        }
                                                        char *chrPointer6 = offsetToStringData6;

                                                        fixed(string str8 = strArrays[7])
                                                        {
                                                            string *strPointers7        = &str8;
                                                            char *  offsetToStringData7 = (char *)(&str8);

                                                            if (&str8 != null)
                                                            {
                                                                offsetToStringData7 = (char *)(strPointers7 + RuntimeHelpers.OffsetToStringData);
                                                            }
                                                            char *chrPointer7 = offsetToStringData7;

                                                            eventDataPointer1 = eventDataPointer;
                                                            if (strArrays[0] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[0] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer;
                                                            }
                                                            if (strArrays[1] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[1] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer1;
                                                            }
                                                            if (strArrays[2] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[2] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer2;
                                                            }
                                                            if (strArrays[3] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[3] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer3;
                                                            }
                                                            if (strArrays[4] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[4] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer4;
                                                            }
                                                            if (strArrays[5] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[5] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer5;
                                                            }
                                                            if (strArrays[6] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[6] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer6;
                                                            }
                                                            if (strArrays[7] != null)
                                                            {
                                                                (eventDataPointer1 + numArray[7] * sizeof(UnsafeNativeMethods.EventData)).DataPointer = (ulong)chrPointer7;
                                                            }
                                                            num = UnsafeNativeMethods.EventWriteTransfer(this.traceRegistrationHandle, ref eventDescriptor, ref eventTraceActivity.ActivityId, ref relatedActivityId, length, eventDataPointer);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            DiagnosticsEventProvider.errorCode = DiagnosticsEventProvider.WriteEventErrorCode.EventTooBig;
                            return(false);
                        }
                    }
                    else
                    {
                        throw Fx.Exception.AsError(new ArgumentOutOfRangeException("eventPayload", InternalSR.EtwMaxNumberArgumentsExceeded(32)));
                    }
                }
            }
            if (num == 0)
            {
                return(true);
            }
            else
            {
                DiagnosticsEventProvider.SetLastError(num);
                return(false);
            }
        }
コード例 #14
0
 unsafe public static void Main()
 {
     string  s    = "dfg";
     string *ptrS = &s;
 }