Example #1
0
        public bool Apply(IFunctionSpecificationAnalyser aNativeFunction, IFunctionAssembler aAssembler)
        {
            PointerCType pointer1Type = aNativeFunction.CurrentParameterType as PointerCType;

            if (pointer1Type == null)
            {
                return(false);
            }
            PointerCType pointer2Type = pointer1Type.BaseType as PointerCType;

            if (pointer2Type == null)
            {
                return(false);
            }
            NamedCType nativeType = pointer2Type.BaseType as NamedCType;

            if (nativeType == null)
            {
                return(false);
            }
            if (!iHandleNames.Contains(nativeType.Name))
            {
                return(false);
            }

            aAssembler.AddPInvokeParameter(
                new CSharpType("IntPtr")
            {
                IsRef = true
            },
                aNativeFunction.CurrentParameter.Name,
                null);
            aAssembler.SuppressManagedWrapper();
            aNativeFunction.ConsumeArgument();
            return(true);
        }
Example #2
0
        public bool Apply(IFunctionSpecificationAnalyser aNativeFunction, IFunctionAssembler aAssembler)
        {
            PointerCType pointerType = aNativeFunction.CurrentParameterType as PointerCType;

            if (pointerType == null)
            {
                return(false);
            }
            NamedCType nativeType = pointerType.BaseType as NamedCType;

            if (nativeType == null)
            {
                return(false);
            }


            CSharpType pinvokeArgType;
            CSharpType managedArgType;

            switch (nativeType.Name)
            {
            case "bool":
                pinvokeArgType = new CSharpType("bool")
                {
                    IsRef = true, Attributes = { "MarshalAs(UnmanagedType.I1)" }
                };
                managedArgType = new CSharpType("bool")
                {
                    IsRef = true
                };
                break;

            case "int":
                pinvokeArgType = managedArgType = new CSharpType("int")
                {
                    IsRef = true
                };
                break;

            case "size_t":
                pinvokeArgType = managedArgType = new CSharpType("UIntPtr")
                {
                    IsRef = true
                };
                break;

            case "sp_uint64":
                pinvokeArgType = managedArgType = new CSharpType("ulong")
                {
                    IsRef = true
                };
                break;

            default:
                string managedEnumName;
                if (!iEnumNativeToManagedMappings.TryGetValue(nativeType.Name, out managedEnumName))
                {
                    return(false);
                }
                pinvokeArgType = managedArgType = new CSharpType(managedEnumName)
                {
                    IsRef = true
                };
                break;
            }

            aAssembler.AddPInvokeParameter(pinvokeArgType, aNativeFunction.CurrentParameter.Name, "ref @" + aNativeFunction.CurrentParameter.Name);
            aAssembler.AddManagedParameter(aNativeFunction.CurrentParameter.Name, managedArgType);
            aNativeFunction.ConsumeArgument();
            return(true);
        }