예제 #1
0
        public static CodeAttributeDeclaration MarshalAsDeclaration(UnmanagedType type, CodeTypeReference customMarshaler = null)
        {
            var value = new CodeAttributeDeclaration(
                new CodeTypeReference(typeof(MarshalAsAttribute)),
                new CodeAttributeArgument(
                    new CodePropertyReferenceExpression(
                        new CodeTypeReferenceExpression(typeof(UnmanagedType)),
                        type.ToString())));

            if (type == UnmanagedType.CustomMarshaler)
            {
                value.Arguments.Add(
                    new CodeAttributeArgument(
                        "MarshalTypeRef",
                        new CodeTypeOfExpression(
                            customMarshaler)));
            }

            return(value);
        }
예제 #2
0
        public override string ToText()
        {
            var builder = new StringBuilder();

            builder.Append("MarshalAs(UnmanagedType.");
            builder.Append(UnmanagedType.ToString());
            if (ArraySubType.HasValue)
            {
                builder.Append(", ArraySubType = UnmanagedType.");
                builder.Append(ArraySubType.Value.ToString());
            }

            if (SizeParamIndex.HasValue)
            {
                builder.Append(", SizeParamIndex = ");
                builder.Append(SizeParamIndex.Value.ToString(CultureInfo.InvariantCulture));
            }

            if (SizeConst.HasValue)
            {
                builder.Append(", SizeConst = ");
                builder.Append(SizeConst.Value.ToString(CultureInfo.InvariantCulture));
            }

            if (MarshalType != null)
            {
                builder.Append(", MarshalType = ").Append(MarshalType);
            }

            if (MarshalTypeRef != null)
            {
                builder.Append(", MarshalTypeRef = ").Append(MarshalTypeRef);
            }

            if (MarshalCookie != null)
            {
                builder.Append(", MarshalCookie = ").Append(MarshalCookie);
            }
            builder.Append(")");
            return(builder.ToString());
        }
    public bool PosTest2()
    {
        bool retVal = true;

        TestLibrary.TestFramework.BeginScenario("PosTest2: Return the field ArraySubType in MarshalAsAttribute class 2");
        try
        {
            MarshalAsAttribute myMarshalAsAttribute = new MarshalAsAttribute(UnmanagedType.ByValArray | UnmanagedType.LPArray);
            UnmanagedType      myVal = myMarshalAsAttribute.ArraySubType;
            if (myVal != 0)
            {
                TestLibrary.TestFramework.LogError("003", "the ExpectResult is 0 but the ActualResult is " + myVal.ToString());
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
            retVal = false;
        }
        return(retVal);
    }
    public bool PosTest1()
    {
        bool retVal = true;

        TestLibrary.TestFramework.BeginScenario("PosTest1: Return the field ArraySubType in MarshalAsAttribute class 1");
        try
        {
            short unmanagedType = Int16.MaxValue;
            MarshalAsAttribute myMarshalAsAttribute = new MarshalAsAttribute(unmanagedType);
            UnmanagedType      myVal = myMarshalAsAttribute.ArraySubType;
            if (myVal != 0)
            {
                TestLibrary.TestFramework.LogError("001", "the ExpectResult is 0 but the ActualResult is " + myVal.ToString());
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
            retVal = false;
        }
        return(retVal);
    }
예제 #5
0
        static internal CodeAttributeDeclaration CreateUnmanagedTypeAttribute(UnmanagedType type)
        {
            CodeAttributeDeclaration decl = new CodeAttributeDeclaration(new CodeTypeReference(typeof(MarshalAsAttribute)));

            decl.Arguments.Add(new CodeAttributeArgument(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(UnmanagedType)), type.ToString())));
            return(decl);
        }
예제 #6
0
        static internal CodeAttributeDeclaration CreateArrayParamTypeAttribute(UnmanagedType arraySubType, CodeAttributeArgument sizeArg)
        {
            CodeAttributeDeclaration decl = CreateUnmanagedTypeAttribute(UnmanagedType.LPArray);

            decl.Arguments.Add(new CodeAttributeArgument("ArraySubType", new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(UnmanagedType)), arraySubType.ToString())));
            decl.Arguments.Add(sizeArg);
            return(decl);
        }
예제 #7
0
    public bool PosTest2()
    {
        bool retVal = true;

        TestLibrary.TestFramework.BeginScenario("PosTest2: Return the property Value in MarshalAsAttribute class 2");
        try
        {
            MarshalAsAttribute myMarshalAsAttribute = new MarshalAsAttribute(UnmanagedType.Currency);
            UnmanagedType      myValue = myMarshalAsAttribute.Value;
            if (myValue != UnmanagedType.Currency)
            {
                TestLibrary.TestFramework.LogError("003", "the ExpectResult is " + UnmanagedType.Currency.ToString() + " but the ActualResult is " + myValue.ToString());
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
            retVal = false;
        }
        return(retVal);
    }