Skip to content

Commit bf9b736

Browse files
zpgitmartinweismann
authored andcommitted
Fixed issue with 'fixed' specifier.
1 parent 7434189 commit bf9b736

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

Source/buildbindingcsharp.go

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)