• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# Generators.MarshalContext类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C#中CppSharp.Generators.MarshalContext的典型用法代码示例。如果您正苦于以下问题:C# MarshalContext类的具体用法?C# MarshalContext怎么用?C# MarshalContext使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



MarshalContext类属于CppSharp.Generators命名空间,在下文中一共展示了MarshalContext类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。

示例1: CSharpMarshalToManaged

        public override void CSharpMarshalToManaged(MarshalContext ctx)
        {
            TemplateSpecializationType templateType = (TemplateSpecializationType) this.Type;
            QualifiedType type = templateType.Arguments[0].Type;

            TextGenerator supportBefore = ctx.SupportBefore;
            supportBefore.WriteLine("var __qlistData = new QListData({0}._0.d);", ctx.ReturnVarName);
            supportBefore.WriteLine("var __size = __qlistData.Size;");
            supportBefore.WriteLine("var __list = new System.Collections.Generic.List<{0}>(__size);", type);
            supportBefore.WriteLine("for (int i = 0; i < __size; i++)");
            supportBefore.WriteStartBraceIndent();
            // TODO: handle pointers to primitives, they cannot be used as a placeholder type and use IntPtr instead
            if (type.Type.IsPrimitiveType() || type.Type.IsEnumType())
            {
                supportBefore.WriteLine("__list.Add(*({0}*) __qlistData.At(i));", type);
            }
            else
            {
                Class @class;
                Type pointee;
                if ((type.Type.IsTagDecl(out @class) ||
                     (type.Type.IsPointerTo(out pointee) && pointee.IsTagDecl(out @class))) && @class.IsAbstract)
                {
                    supportBefore.WriteLine("__list.Add(new {0}Internal(new global::System.IntPtr(__qlistData.At(i))));", type, ctx.ReturnVarName);
                }
                else
                {
                    supportBefore.WriteLine("__list.Add(new {0}(new global::System.IntPtr(__qlistData.At(i))));", type, ctx.ReturnVarName);
                }
            }
            supportBefore.WriteCloseBraceIndent();
            ctx.Return.Write("__list");
        }
开发者ID:RodolpheFouquet,项目名称:QtSharp,代码行数:33,代码来源:QList.cs


示例2: CSharpMarshalToManaged

 public override void CSharpMarshalToManaged(MarshalContext ctx)
 {
     if (ctx.ReturnType.Type.Desugar().IsAddress())
     {
         var finalType = ctx.ReturnType.Type.GetFinalPointee() ?? ctx.ReturnType.Type;
         var enumType = GetEnumType(finalType);
         ctx.Return.Write("*({0}*) {1}", enumType, ctx.ReturnVarName);
     }
     else
     {
         ctx.Return.Write(ctx.ReturnVarName);
     }
 }
开发者ID:ymlai87416,项目名称:CppSharp,代码行数:13,代码来源:CSharp.cs


示例3: CSharpMarshalCopyCtorToManaged

 public override void CSharpMarshalCopyCtorToManaged(MarshalContext ctx)
 {
     ctx.SupportBefore.WriteLine("var __instance = new {0}.Internal();", ctx.ReturnType);
     ctx.SupportBefore.WriteLine("QListData.Data.Internal* qListData = (QListData.Data.Internal*) __instance._0.d;");
     ctx.SupportBefore.WriteLine("QListData.Data.Internal* result = (QListData.Data.Internal*) __ret._0.d;");
     ctx.SupportBefore.WriteLine("qListData->begin = result->begin;");
     ctx.SupportBefore.WriteLine("qListData->end = result->end;");
     ctx.SupportBefore.WriteLine("qListData->alloc = result->alloc;");
     ctx.SupportBefore.WriteLine("fixed (void** v = new void*[qListData->end])");
     ctx.SupportBefore.WriteStartBraceIndent();
     ctx.SupportBefore.WriteLine("for (int i = 0; i < qListData->end; i++)");
     ctx.SupportBefore.WriteStartBraceIndent();
     ctx.SupportBefore.WriteLine("v[i] = *(result->array + i);");
     ctx.SupportBefore.WriteCloseBraceIndent();
     ctx.SupportBefore.WriteLine("qListData->array = v;");
     ctx.SupportBefore.WriteCloseBraceIndent();
     ctx.SupportBefore.WriteLine("__instance._0.d = (IntPtr) qListData;");
 }
开发者ID:RodolpheFouquet,项目名称:QtSharp,代码行数:18,代码来源:QList.cs


示例4: CSharpMarshalToNative

 public override void CSharpMarshalToNative(MarshalContext ctx)
 {
     ctx.SupportBefore.WriteLine("var __qstring{0} = QString.FromUtf16((ushort*) Marshal.StringToHGlobalUni({1}).ToPointer(), {1}.Length);",
                                 ctx.ParameterIndex, ctx.Parameter.Name);
     Type type = ctx.Parameter.Type.Desugar();
     if (type.IsAddress())
     {
         ctx.Return.Write("ReferenceEquals(__qstring{0}, null) ? global::System.IntPtr.Zero : __qstring{0}.{1}",
                          ctx.ParameterIndex, Helpers.InstanceIdentifier);
         return;
     }
     Class @class;
     type.IsTagDecl(out @class);
     if (@class == null)
     {
         Type.IsTagDecl(out @class);
     }
     var qualifiedIdentifier = CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier(@class.OriginalClass ?? @class);
     ctx.Return.Write("ReferenceEquals(__qstring{0}, null) ? new {1}.Internal() : *({1}.Internal*) (__qstring{0}.{2})",
                      ctx.ParameterIndex, qualifiedIdentifier, Helpers.InstanceIdentifier);
 }
开发者ID:RodolpheFouquet,项目名称:QtSharp,代码行数:21,代码来源:QString.cs


示例5: CSharpMarshalToNative

 public override void CSharpMarshalToNative(MarshalContext ctx)
 {
     ctx.SupportBefore.WriteLine("var __stringPtr{0} = (ushort*) Marshal.StringToHGlobalUni({1}).ToPointer();",
                                 ctx.ParameterIndex, ctx.Parameter.Name);
     ctx.SupportBefore.WriteLine("var __qstring{0} = QtCore.QString.FromUtf16(ref *__stringPtr{0}, {1}.Length);",
                                 ctx.ParameterIndex, ctx.Parameter.Name);
     Type type = ctx.Parameter.Type.Desugar();
     if (type.IsAddress())
     {
         ctx.Return.Write("ReferenceEquals(__qstring{0}, null) ? global::System.IntPtr.Zero : __qstring{0}.{1}",
                          ctx.ParameterIndex, Helpers.InstanceIdentifier);
         return;
     }
     Class @class;
     type.TryGetClass(out @class);
     if (@class == null)
     {
         Type.TryGetClass(out @class);
     }
     typePrinter = typePrinter ?? (typePrinter = new CSharpTypePrinter(ctx.Driver));
     var qualifiedIdentifier = (@class.OriginalClass ?? @class).Visit(typePrinter);
     ctx.Return.Write("ReferenceEquals(__qstring{0}, null) ? new {1}.Internal() : *({1}.Internal*) (__qstring{0}.{2})",
                      ctx.ParameterIndex, qualifiedIdentifier, Helpers.InstanceIdentifier);
 }
开发者ID:nanox,项目名称:QtSharp,代码行数:24,代码来源:QString.cs


示例6: CSharpMarshalToManaged

 public override void CSharpMarshalToManaged(MarshalContext ctx)
 {
     ctx.Return.Write("Marshal.PtrToStringUni(new IntPtr(new QString({0}).Utf16))", ctx.ReturnVarName);
 }
开发者ID:RodolpheFouquet,项目名称:QtSharp,代码行数:4,代码来源:QString.cs


示例7: CSharpMarshalToNative

 public override void CSharpMarshalToNative(MarshalContext ctx)
 {
     ctx.Return.Write("IntPtr.Zero");
 }
开发者ID:daxiazh,项目名称:CppSharp,代码行数:4,代码来源:Common.cs


示例8: CSharpMarshalToManaged

        public override void CSharpMarshalToManaged(MarshalContext ctx)
        {
            var templateType = Type as TemplateSpecializationType;
            var type = templateType.Arguments[0].Type;

            ctx.Return.Write("new Std.Vector<{0}>({1})", type,
                ctx.ReturnVarName);
        }
开发者ID:jijamw,项目名称:CppSharp,代码行数:8,代码来源:Stdlib.cs


示例9: CSharpMarshalCopyCtorToManaged

 public override void CSharpMarshalCopyCtorToManaged(MarshalContext ctx)
 {
     ctx.SupportBefore.WriteLine("var __instance = new {0}.Internal();", ctx.ReturnType);
     ctx.SupportBefore.WriteLine("__instance.i = {0}.i;", ctx.ReturnVarName);
 }
开发者ID:daxiazh,项目名称:CppSharp,代码行数:5,代码来源:QList.cs


示例10: CSharpMarshalToNative

 public override void CSharpMarshalToNative(MarshalContext ctx)
 {
     if (ctx.Parameter.Type.Desugar().IsAddress())
         ctx.Return.Write("new global::System.IntPtr(&{0})", ctx.Parameter.Name);
     else
         ctx.Return.Write(ctx.Parameter.Name);
 }
开发者ID:ymlai87416,项目名称:CppSharp,代码行数:7,代码来源:CSharp.cs


示例11: CLIMarshalToNative

 public override void CLIMarshalToNative(MarshalContext ctx)
 {
     var marshal = (CLIMarshalManagedToNativePrinter) ctx.MarshalToNative;
     if (!ctx.Parameter.Type.Desugar().IsPointer())
         marshal.ArgumentPrefix.Write("*");
     var marshalCtxName = string.Format("ctx_{0}", ctx.Parameter.Name);
     ctx.SupportBefore.WriteLine("msclr::interop::marshal_context {0};", marshalCtxName);
     ctx.Return.Write("{0}.marshal_as<std::ostream*>({1})",
         marshalCtxName, ctx.Parameter.Name);
 }
开发者ID:ddobrev,项目名称:CppSharp,代码行数:10,代码来源:Stdlib.cs


示例12: MarshalPrinter

 protected MarshalPrinter(MarshalContext ctx)
 {
     Context = ctx;
 }
开发者ID:kitsilanosoftware,项目名称:CppSharp,代码行数:4,代码来源:Marshal.cs


示例13: CSharpMarshalToNative

 public override void CSharpMarshalToNative(MarshalContext ctx)
 {
     TextGenerator supportBefore = ctx.SupportBefore;
     string suffix = ctx.ParameterIndex > 0 ? ctx.ParameterIndex.ToString(CultureInfo.InvariantCulture) : string.Empty;
     string qList = string.Format("__qList{0}", suffix);
     supportBefore.WriteLine(string.Format("var {0} = new QtCore.QList.Internal();", qList));
     string qListDataData = string.Format("__qlistDataData{0}", suffix);
     supportBefore.WriteLine("var {0} = (QListData.Data.Internal*) {1}._0.d;", qListDataData, qList);
     // TODO: tests with Qt shows that while alloc is not smaller than end, it's not equal, it reserves more space actually
     supportBefore.WriteLine("{0}->alloc = {1}.Count;", qListDataData, ctx.Parameter.Name);
     supportBefore.WriteLine("{0}->begin = 0;", qListDataData, ctx.Parameter.Name);
     supportBefore.WriteLine("{0}->end = {1}.Count;", qListDataData, ctx.Parameter.Name);
     supportBefore.WriteLine("fixed (void** __v = new void*[{0}.Count])", ctx.Parameter.Name);
     supportBefore.WriteStartBraceIndent();
     supportBefore.WriteLine("{0}->array = __v;", qListDataData);
     supportBefore.WriteCloseBraceIndent();
     supportBefore.WriteLine("", qListDataData, ctx.Parameter.Name);
     var parameterType = ctx.Parameter.Type.Desugar();
     TemplateSpecializationType type = parameterType as TemplateSpecializationType;
     if (type == null)
     {
         TypedefType typedef;
         if (parameterType.IsPointerTo(out typedef))
         {
             type = (TemplateSpecializationType) typedef.Desugar();
         }
         else
         {
             parameterType.IsPointerTo(out type);
         }
     }
     Type elementType = type.Arguments[0].Type.Type.Desugar();
     string instance = string.Empty;
     if (!elementType.IsPointerToPrimitiveType())
     {
         instance = string.Format(".{0}", Helpers.InstanceIdentifier);
     }
     supportBefore.WriteLine("for (int i = 0; i < {0}.Count; i++)", ctx.Parameter.Name);
     supportBefore.WriteStartBraceIndent();
     Type desugared = ctx.Parameter.Type.Desugar();
     TemplateSpecializationType templateSpecializationType = desugared as TemplateSpecializationType;
     if (templateSpecializationType == null)
     {
         Type paramType;
         desugared.IsPointerTo(out paramType);
         templateSpecializationType = (TemplateSpecializationType) paramType.Desugar();
     }
     TemplateArgument templateArgument = templateSpecializationType.Arguments[0];
     if (templateArgument.Type.ToString() == "string")
     {
         supportBefore.WriteLine("{0}->array[i] = Marshal.StringToHGlobalUni({1}[i]).ToPointer();", qListDataData, ctx.Parameter.Name, instance);
     }
     else
     {
         Class @class;
         if (templateArgument.Type.Type.IsTagDecl(out @class) && @class.IsValueType)
         {
             supportBefore.WriteLine("{0}.Internal __value = {1}[i].ToInternal();", @class.Name, ctx.Parameter.Name, instance);
             supportBefore.WriteLine("{0}->array[i] = &__value;", qListDataData, ctx.Parameter.Name, instance);
         }
         else
         {
             supportBefore.WriteLine("{0}->array[i] = (void*) {1}[i]{2};", qListDataData, ctx.Parameter.Name, instance);
         }
     }
     supportBefore.WriteCloseBraceIndent();
     ctx.Return.Write(qList);
 }
开发者ID:RodolpheFouquet,项目名称:QtSharp,代码行数:68,代码来源:QList.cs


示例14: CSharpMarshalToManaged

 public override void CSharpMarshalToManaged(MarshalContext ctx)
 {
 }
开发者ID:daxiazh,项目名称:CppSharp,代码行数:3,代码来源:QList.cs


示例15: CLIMarshalToNative

 public override void CLIMarshalToNative(MarshalContext ctx)
 {
     ctx.Return.Write("::TypeMappedIndex()");
 }
开发者ID:tritao,项目名称:CppSharp,代码行数:4,代码来源:Common.cs


示例16: CSharpMarshalToManaged

 public override void CSharpMarshalToManaged(MarshalContext ctx)
 {
     ctx.Return.Write("Marshal.PtrToStringUni(new IntPtr(QtCore.QString.{0}({1}).Utf16))",
         Helpers.CreateInstanceIdentifier, ctx.ReturnVarName);
 }
开发者ID:YekMX,项目名称:QtSharp,代码行数:5,代码来源:QString.cs


示例17: CLIMarshalToManaged

        public override void CLIMarshalToManaged(MarshalContext ctx)
        {
            var templateType = Type as TemplateSpecializationType;
            var type = templateType.Arguments[0].Type;
            var isPointerToPrimitive = type.Type.IsPointerToPrimitiveType();
            var managedType = isPointerToPrimitive
                ? new CILType(typeof(System.IntPtr))
                : type.Type;
            var tmpVarName = "_tmp" + ctx.ArgName;
            
            ctx.SupportBefore.WriteLine(
                "auto {0} = gcnew System::Collections::Generic::List<{1}>();",
                tmpVarName, managedType);
            ctx.SupportBefore.WriteLine("for(auto _element : {0})",
                ctx.ReturnVarName);
            ctx.SupportBefore.WriteStartBraceIndent();
            {
                var elementCtx = new MarshalContext(ctx.Context)
                                     {
                                         ReturnVarName = "_element",
                                         ReturnType = type
                                     };

                var marshal = new CLIMarshalNativeToManagedPrinter(elementCtx);
                type.Type.Visit(marshal);

                if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore))
                    ctx.SupportBefore.Write(marshal.Context.SupportBefore);

                ctx.SupportBefore.WriteLine("auto _marshalElement = {0};",
                    marshal.Context.Return);

                if (isPointerToPrimitive)
                    ctx.SupportBefore.WriteLine("{0}->Add({1}(_marshalElement));",
                        tmpVarName, managedType);
                else
                    ctx.SupportBefore.WriteLine("{0}->Add(_marshalElement);",
                        tmpVarName);
            }
            ctx.SupportBefore.WriteCloseBraceIndent();

            ctx.Return.Write(tmpVarName);
        }
开发者ID:ddobrev,项目名称:CppSharp,代码行数:43,代码来源:Stdlib.cs


示例18: CSharpMarshalToManaged

 public override void CSharpMarshalToManaged(MarshalContext ctx)
 {
     ctx.Return.Write(ctx.ReturnVarName);
 }
开发者ID:jijamw,项目名称:CppSharp,代码行数:4,代码来源:CSharpTemp.cs


示例19: CSharpMarshalToNative

 public override void CSharpMarshalToNative(MarshalContext ctx)
 {
 }
开发者ID:daxiazh,项目名称:CppSharp,代码行数:3,代码来源:QList.cs


示例20: CSharpMarshalToManaged

 public virtual void CSharpMarshalToManaged(MarshalContext ctx)
 {
     throw new NotImplementedException();
 }
开发者ID:kidleon,项目名称:CppSharp,代码行数:4,代码来源:TypeMap.cs



注:本文中的CppSharp.Generators.MarshalContext类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# Net.MinecraftStream类代码示例发布时间:2022-05-24
下一篇:
C# AST.Method类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap