so. ich hab mich da jetzt weitergespielt und steh jetzt vor folgenden problemen:
ich das mal soweit nachgebaut wie ichs brauch:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class Parser_Argument_t
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public int int_value;
[FieldOffset(4)]
public float float_value;
[FieldOffset(4)]
public byte char_value;
[FieldOffset(4)]
public string string_value;
}
[StructLayout(LayoutKind.Sequential)]
public class Parser_Statement_t
{
public int stp;
public string name;
IntPtr argCnt;
Parser_Argument_t arg;
}
|
so bekomme ich diese fehler:
Cannot marshal field 'arg' of type 'GUI.Forms.Parser_Statement_t': There is no marshaling support for this type.
wenn ich jetzt den string nicht an stelle 4 sondern 8 setze gehts zwar, aber es steht etwas drin, das so nicht stimmen kann.
und die zweite sache is der doppelpointer.
ich habe halt nur zugriff auf das erste strucht, dass ich der funktion übergebe.
jetzt weiß ich nur gar nicht wie ich jetzt zugriff auf die anderen bekomme.
ich hab versucht den ** als ein Statement[] zu übergeben, aber das geht gar net...
also nicht:
|
C-/C++-Quelltext
|
1
2
|
protected static extern int Parser_Parse(string inputFile, ref IntPtr statementCnt,
ref Parser_Statement_t statementList);
|
sondern:
|
C-/C++-Quelltext
|
1
2
|
protected static extern int Parser_Parse(string inputFile, ref IntPtr statementCnt,
ref Parser_Statement_t[] statementList);
|
zu erinnerung die originale c++ funktion schaut so aus:
|
C-/C++-Quelltext
|
1
2
3
|
Parser_Status_t Parser_Parse(
const char_t* const inputFile, size_t* const statementCnt,
Parser_Statement_t** const statementList)
|
lg