コード例 #1
0
        public override string GetCLRParamTypeName(DefParam param)
        {
            if (IsVoid)
            {
                string name = "void";
                if (param.IsConst) name = "const " + name;

                switch (param.PassedByType)
                {
                    case PassedByType.Value:
                        break;
                    case PassedByType.Pointer:
                        name += "*";
                        break;
                    case PassedByType.PointerPointer:
                        name += "*%";
                        break;
                    case PassedByType.Reference:
                        throw new Exception("Unexpected");
                }
                return name;
            }

            switch (param.PassedByType)
            {
                case PassedByType.Value:
                    return Name;
                case PassedByType.Reference:
                case PassedByType.Pointer:
                    if (!param.IsConst && !param.HasAttribute<RawPointerParamAttribute>())
                    {
                        return "[Out] " + Name + "%";
                    }
                    else
                    {
                        //Treat it as array
                        //return "array<" + FullCLRName + ">^";
                        string name = Name + "*";
                        if (param.IsConst) name = "const " + name;
                        return name;
                    }
                case PassedByType.PointerPointer:
                default:
                    throw new Exception("Unexpected");
            }
        }
コード例 #2
0
        public override string GetPreCallParamConversion(DefParam param, out string newname)
        {
            if (IsVoid)
            {
                newname = param.Name;
                return "";
            }

            switch (param.PassedByType)
            {
                case PassedByType.Reference:
                    newname = "*p_" + param.Name;
                    return "pin_ptr<" + FullCLRName + "> p_" + param.Name + " = &" + param.Name + ";\n";
                case PassedByType.Pointer:
                    if (!param.IsConst && !param.HasAttribute<RawPointerParamAttribute>())
                    {
                        newname = "p_" + param.Name;
                        return "pin_ptr<" + FullCLRName + "> p_" + param.Name + " = &" + param.Name + ";\n";
                    }
                    else
                    {
                        //Treat it as array
                        //newname = "arr_" + param.Name;
                        //string expr = FullNativeName + "* arr_" + param.Name + " = new " + FullNativeName + "[" + param.Name + "->Length];\n";
                        //expr += "pin_ptr<" + FullCLRName + "> src_" + param.Name + " = &" + param.Name + "[0];\n";
                        //expr += "memcpy(arr_" + param.Name + ", src_" + param.Name + ", " + param.Name + "->Length * sizeof(" + FullNativeName + "));\n";
                        //return expr;
                        newname = param.Name;
                        return "";
                    }
                default:
                    return base.GetPreCallParamConversion(param, out newname);
            }
        }