Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
IntPtr statePtr = Marshal.AllocHGlobal(Marshal.SizeOf(state)); Marshal.StructureToPtr(state, statePtr, false); int retval = Parser_Parse(pathToFile_, out statementCnt, out statePtr); ret = (Parser_Status_t)retval; Parser_Statement_t st = (Parser_Statement_t)Marshal.PtrToStructure(statePtr, typeof(Parser_Statement_t)); state = st; |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AlymcGeel« (24.05.2011, 10:42)
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[StructLayout(LayoutKind.Explicit)] public struct 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)] [MarshalAs(UnmanagedType.LPStr)] public string string_value; } [StructLayout(LayoutKind.Sequential)] public struct Parser_Statement_t { public int stp; [MarshalAs(UnmanagedType.LPStr)] public string name; IntPtr argCnt; Parser_Argument_t arg; } |
also. naja ich bin nicht der einzige der diese parser dll verwendet und daher wärs gscheiter, wenn ich die bestehende dll verwende und das ganze nicht selber neu schreib.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (24.05.2011, 10:55)
Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »dot« (24.05.2011, 11:36)
ich habe einen IntPtr aufs erste element und kann mir das auch in ein struct umwandeln und dann die daten sehen aber wie komme ich zum zweiten element?
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (24.05.2011, 12:04)
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[StructLayout(LayoutKind.Sequential)] public struct Parser_Statement_t { public Parser_StatementType_t stp; public string name; public IntPtr argCnt; public IntPtr arg; } //wie gesagt das statement hat fürn string als fieldoffset jetzt 8 //so mach ich den eigentlichen aufruf: Parser_Statement_t state = new Parser_Statement_t(); IntPtr statePtr = Marshal.AllocHGlobal(Marshal.SizeOf(state)); Marshal.StructureToPtr(state, statePtr, false); int retval = Parser_Parse(pathToFile_, out statementCnt, out statePtr); ret = (Parser_Status_t)retval; state = (Parser_Statement_t)Marshal.PtrToStructure(statePtr, typeof(Parser_Statement_t)); //und so incrementere ich pointer: public static IntPtr Increment(IntPtr ptr, int cbSize) { return new IntPtr(ptr.ToInt64() + cbSize); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif |
Werbeanzeige