本文整理汇总了C#中Generator.InsertLine方法的典型用法代码示例。如果您正苦于以下问题:C# Generator.InsertLine方法的具体用法?C# Generator.InsertLine怎么用?C# Generator.InsertLine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Generator
的用法示例。
在下文中一共展示了Generator.InsertLine方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EmitCodeStruct
private void EmitCodeStruct(Generator generator, int depth, int ident)
{
generator.EmitLine("[StructLayout(LayoutKind.Sequential,Pack=8)]", depth);
int attribMarker = generator.GetMarker();
generator.EmitLine("public struct " + GetName(), depth);
generator.EmitLine("{", depth);
foreach (INode child in children)
{
if ( child is FieldNode && !String.IsNullOrEmpty( child.GetName() ) )
{
INode basetype;
bool constness, pointer;
bool arraytype = false;
string size = "";
string types = child.ResolveType( 0, out basetype, out constness, out pointer );
if ( basetype is ArrayTypeNode )
{
size = basetype.GetAttribute("size");
types = basetype.ResolveType(1, out basetype, out constness, out pointer);
pointer = true;
arraytype = true;
}
types = generator.ResolveType( types, constness, pointer, true, false );
if ( types == "bool" )
{
generator.EmitLine( "[MarshalAs(UnmanagedType.I1)]", depth + 1 );
}
else if ( types == "string" )
{
if (arraytype)
{
generator.EmitLine("[MarshalAs(UnmanagedType.ByValTStr, SizeConst = " + size + ")]", depth + 1);
}
else
{
types = "string";
}
}
else if ( types == "Byte[]" )
{
if (arraytype)
{
generator.EmitLine("[MarshalAs(UnmanagedType.ByValArray, SizeConst = " + size + ")]", depth + 1);
}
else
{
types = "IntPtr";
}
}
else if ( types == "CSteamID" || types == "CGameID" )
{
types = "UInt64";
}
else if (pointer)
{
types = "IntPtr";
}
else if (types == child.GetName())
{
continue;
}
generator.EmitLine( String.Format( "public {0} {1};", types, child.GetName() ), depth + 1 );
}
else if(child is EnumNode)
{
// anonymous enum declaration
EnumNode innerEnum = child as EnumNode;
int callback = innerEnum.EmitCodeInnerStructCallback(generator, depth + 1);
if(callback > 0)
{
generator.InsertLine("[InteropHelp.CallbackIdentity(" + callback + ")]", attribMarker, depth);
}
}
else if(child is FieldNode)
{
// anonymous field like union
// not implemented!
}
}
generator.EmitLine("};", depth);
generator.EmitLine("", depth);
}