コード例 #1
0
ファイル: Parameter.cs プロジェクト: robguyoncourt/APE
        public Parameter(APEIPC instance, string param)
        {
            Message *PtrMessage = instance.GetPointerToNextMessage();

            if (param != null)
            {
                int length = param.Length * 2;  //UTF16 charcter: For a 4 byte surrogate pair, length actually returns 2 somewhat confusingly although its convenient for us here, so we can just use length * 2
                CheckSize(instance, length);
                fixed(void *PtrString = param)
                {
                    NM.CopyMemory(instance.m_IntPtrMemoryMappedFileViewStringStore + instance.m_StringStoreOffset, (IntPtr)PtrString, (UIntPtr)(length));
                }

                PtrMessage->Parameter.StringOffset[PtrMessage->NumberOfParameters] = instance.m_StringStoreOffset;
                PtrMessage->Parameter.StringLength[PtrMessage->NumberOfParameters] = param.Length;
                instance.m_StringStoreOffset = instance.m_StringStoreOffset + (param.Length * 2);
            }
            else
            {
                PtrMessage->Parameter.StringOffset[PtrMessage->NumberOfParameters] = -1;
                PtrMessage->Parameter.StringLength[PtrMessage->NumberOfParameters] = -1;
            }

            PtrMessage->Parameter.TypeCode[PtrMessage->NumberOfParameters]      = (int)ApeTypeCode.String;
            PtrMessage->Parameter.ParameterType[PtrMessage->NumberOfParameters] = (int)ParameterType.In;
            PtrMessage->TypeCodeKey += ((PtrMessage->NumberOfParameters * OneLargerThanApeTypeCodeEnumMax * 2) + (int)ApeTypeCode.String) + ((PtrMessage->NumberOfParameters * OneLargerThanApeTypeCodeEnumMax * 2) + OneLargerThanApeTypeCodeEnumMax + (int)ParameterType.In);
            PtrMessage->NumberOfParameters++;
        }
コード例 #2
0
ファイル: Parameter.cs プロジェクト: robguyoncourt/APE
        public Parameter(APEIPC instance, Image param)
        {
            Message *PtrMessage = instance.GetPointerToNextMessage();

            if (param != null)
            {
                //Convert to byte array
                MemoryStream ms             = new MemoryStream();
                ImageFormat  theImageFormat = param.RawFormat;

                if (theImageFormat.Guid == ImageFormat.MemoryBmp.Guid)  //MemoryBmp don't seem to be able to be saved
                {
                    theImageFormat = ImageFormat.Bmp;
                }

                param.Save(ms, theImageFormat);
                byte[] imageAsByteArray = ms.ToArray();

                int length = imageAsByteArray.Length;
                CheckSize(instance, length);
                fixed(void *PtrByteArray = imageAsByteArray)
                {
                    NM.CopyMemory(instance.m_IntPtrMemoryMappedFileViewStringStore + instance.m_StringStoreOffset, (IntPtr)PtrByteArray, (UIntPtr)(length));
                }

                PtrMessage->Parameter.StringOffset[PtrMessage->NumberOfParameters] = instance.m_StringStoreOffset;
                PtrMessage->Parameter.StringLength[PtrMessage->NumberOfParameters] = imageAsByteArray.Length;
                instance.m_StringStoreOffset = instance.m_StringStoreOffset + imageAsByteArray.Length;
            }
            else
            {
                PtrMessage->Parameter.StringOffset[PtrMessage->NumberOfParameters] = -1;
                PtrMessage->Parameter.StringLength[PtrMessage->NumberOfParameters] = -1;
            }

            PtrMessage->Parameter.TypeCode[PtrMessage->NumberOfParameters]      = (int)ApeTypeCode.Image;
            PtrMessage->Parameter.ParameterType[PtrMessage->NumberOfParameters] = (int)ParameterType.In;
            PtrMessage->TypeCodeKey += ((PtrMessage->NumberOfParameters * OneLargerThanApeTypeCodeEnumMax * 2) + (int)ApeTypeCode.Image) + ((PtrMessage->NumberOfParameters * OneLargerThanApeTypeCodeEnumMax * 2) + OneLargerThanApeTypeCodeEnumMax + (int)ParameterType.In);
            PtrMessage->NumberOfParameters++;
        }
コード例 #3
0
        public Parameter(APEIPC instance, DataStores param, ParameterType apeParameterType, string parameterType)
        {
            Message *PtrMessage = instance.GetPointerToNextMessage();

            PtrMessage->Parameter.Int32[PtrMessage->NumberOfParameters]         = (Int32)param;
            PtrMessage->Parameter.TypeCode[PtrMessage->NumberOfParameters]      = (int)ApeTypeCode.DataStore;
            PtrMessage->Parameter.ParameterType[PtrMessage->NumberOfParameters] = (int)apeParameterType;
            PtrMessage->TypeCodeKey += ((PtrMessage->NumberOfParameters * OneLargerThanApeTypeCodeEnumMax * 2) + (int)ApeTypeCode.DataStore) + ((PtrMessage->NumberOfParameters * OneLargerThanApeTypeCodeEnumMax * 2) + OneLargerThanApeTypeCodeEnumMax + (int)apeParameterType);

            if (apeParameterType == ParameterType.Out)
            {
                fixed(void *PtrString = parameterType)
                {
                    NM.CopyMemory(instance.m_IntPtrMemoryMappedFileViewStringStore + instance.m_StringStoreOffset, (IntPtr)PtrString, (UIntPtr)(parameterType.Length * 2));    //UTF16 charcter: For a 4 byte surrogate pair, length actually returns 2 somewhat confusingly although its convenient for us here, so we can just use length * 2
                }

                PtrMessage->Parameter.StringOffset[PtrMessage->NumberOfParameters] = instance.m_StringStoreOffset;
                PtrMessage->Parameter.StringLength[PtrMessage->NumberOfParameters] = parameterType.Length;
                instance.m_StringStoreOffset = instance.m_StringStoreOffset + (parameterType.Length * 2);
            }

            PtrMessage->NumberOfParameters++;
        }