@@ -739,68 +739,73 @@ func buildBindingCSharpImplementation(component ComponentDefinition, w LanguageW
739739 element := structinfo .Members [j ]
740740
741741 arraysuffix := ""
742- fixedtag := ""
742+ arrayinitialization := ""
743743 multiplier := 1
744744 if element .Rows > 0 {
745+ arraysuffix = "[]"
746+ arraytypename , err := getCSharpParameterType (element .Type , NameSpace , "" , true )
747+ if err != nil {
748+ return err
749+ }
750+
745751 if element .Columns > 0 {
746752 multiplier = element .Rows * element .Columns
747- arraysuffix = fmt .Sprintf ("[%d]" , multiplier )
753+ arrayinitialization = fmt .Sprintf (" = new %s [%d]" , arraytypename , multiplier )
748754 } else {
749755 multiplier = element .Rows
750- arraysuffix = fmt .Sprintf ("[%d]" , multiplier )
756+ arrayinitialization = fmt .Sprintf (" = new %s [%d]" , arraytypename , multiplier )
751757 }
752- fixedtag = "fixed "
753758 }
754759
755760 switch element .Type {
756761 case "uint8" :
757- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sByte %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
762+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Byte%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
758763 fieldOffset = fieldOffset + 1 * multiplier
759764 case "uint16" :
760- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sUInt16 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
765+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public UInt16%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
761766 fieldOffset = fieldOffset + 2 * multiplier
762767 case "uint32" :
763- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sUInt32 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
768+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public UInt32%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
764769 fieldOffset = fieldOffset + 4 * multiplier
765770 case "uint64" :
766- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sUInt64 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
771+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public UInt64%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
767772 fieldOffset = fieldOffset + 8 * multiplier
768773 case "int8" :
769- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %ssbyte %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
774+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Int8%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
770775 fieldOffset = fieldOffset + 1 * multiplier
771776 case "int16" :
772- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sInt16 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
777+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Int16%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
773778 fieldOffset = fieldOffset + 2 * multiplier
774779 case "int32" :
775- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sInt32 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
780+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Int32%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
776781 fieldOffset = fieldOffset + 4 * multiplier
777782 case "int64" :
778- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sInt64 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
783+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Int64%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
779784 fieldOffset = fieldOffset + 8 * multiplier
780785 case "bool" :
781- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sByte %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
786+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Byte%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
782787 fieldOffset = fieldOffset + 1 * multiplier
783788 case "single" :
784- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sSingle %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
789+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Single%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
785790 fieldOffset = fieldOffset + 4 * multiplier
786791 case "double" :
787- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sDouble %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
792+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Double%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
788793 fieldOffset = fieldOffset + 8 * multiplier
789794 case "pointer" :
790- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sUInt64 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
795+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Uint64%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
791796 fieldOffset = fieldOffset + 8 * multiplier
792797 case "string" :
793798 return fmt .Errorf ("it is not possible for struct s%s%s to contain a string value" , NameSpace , structinfo .Name )
794799 case "class" , "optionalclass" :
795800 return fmt .Errorf ("it is not possible for struct s%s%s to contain a handle value" , NameSpace , structinfo .Name )
796801 case "enum" :
797- memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public %sInt32 %s%s;" , fieldOffset , fixedtag , element .Name , arraysuffix ))
802+ memberLines = append (memberLines , fmt .Sprintf ("[FieldOffset(%d)] public Int32%s %s%s;" , fieldOffset , arraysuffix , element .Name , arrayinitialization ))
798803 fieldOffset = fieldOffset + 4 * multiplier
799804 }
800805 }
801806
802807 w .Writeln (" [StructLayout(LayoutKind.Explicit, Size=%d)]" , fieldOffset )
803- w .Writeln (" public struct Internal%s" , structinfo .Name )
808+ w .Writeln (" public class Internal%s" , structinfo .Name )
804809 w .Writeln (" {" )
805810 w .Writelns (" " , memberLines )
806811 w .Writeln (" }" )
@@ -903,7 +908,7 @@ func buildBindingCSharpImplementation(component ComponentDefinition, w LanguageW
903908
904909 w .Writeln (" public static Internal%s convertStructToInternal_%s (s%s %s)" , structinfo .Name , structinfo .Name , structinfo .Name , structinfo .Name )
905910 w .Writeln (" {" )
906- w .Writeln (" Internal%s int%s;" , structinfo .Name , structinfo .Name )
911+ w .Writeln (" Internal%s int%s = new Internal%s();" , structinfo . Name , structinfo .Name , structinfo .Name )
907912
908913 for j := 0 ; j < len (structinfo .Members ); j ++ {
909914 element := structinfo .Members [j ]
0 commit comments