Datentyp TCHAR szName[9]?

MichiStroi

Erfahrenes Mitglied
Hi!

Ich möchte die vorliegende Typedefinition in C# übersetzen, und scheitere am Objekt: TCHAR szName[9]".
Könnte mir bitte hir jemand auf die Sprünge helfen?
Wie sieht dieser Datentyp exakt aus und wie lautet das äquivalent in C#?

Schönen Dank im Vorraus...

Grüße
Michi

Code:
typedef struct
{
	int		iSize;					// Structure size for version control

	int		iTime;					// Start time of exercise in seconds
	int		iDate;					// Start date of exercise in yyyymmdd
	int		iDuration;				// Duration of exercise in seconds
	BOOL	bUSTimeMode;			// Usage of 12h time mode in exercise
	int		iSamplingRate;			// Sampling rate of exercise
	BOOL	bDeleted;				// Exercise has been marked to be deleted

	BOOL	bSpeed;					// Speed sensor data available
	BOOL	bCadence;				// Cadence sensor data available
	BOOL	bAltitude;				// Altitude sensor data available
	BOOL	bPower;					// Power sensor data available

	BOOL	bInterval;				// Interval data available

	TCHAR	szName[9];				// Exercise set/profile name used in exercise
									// Max number of characters is 8 + ending zero

	int		iBike;					// Bike used at exercise (0 = off, 1 = bike1, 2 = bike2)

} POLAR_EXERCISEFILE;
 
Ich würde string verwenden. Eventuell kommst du aber auch mit einem char[] weiter, also einem char-Array. Eventuell so:
Code:
TCHAR[]	szName = new THCAR[ 9 ];
Ich muss aber gestehen, dass ich nicht sicher bin, dich richtig verstanden zu haben.
 
Ich habs mal damit versuch:
In Typedef struct:
Code:
public string[] szName;
und in der Klasse, in der ich das Objekt verwende:
Code:
pef.szName = new string[9];

aber auch mit char[] hat es nicht geklappt.
Ich bekomm immer wieder folgende Fehlermeldung (siehe Bild) und im Objekt habe ich überhaupt keine Werte drin.

gibt es überhaupt ein tchar ähnliches Objekt in C#?
Kann man einen Datentyp wie zB Funktionen aus C++ importieren?

Danke
Michi
 

Anhänge

  • Error.gif
    Error.gif
    6,6 KB · Aufrufe: 216
Ist dir der Unterschied zwischen einem string und einem char bewusst? Ich bin nur neugierig, weil dies
Code:
pef.szName = new string[9];
ein Array von 9 strings anlegt, nicht aber 9 char, also Zeichen. Habe möglicherweise deinen Wissensstand falsch eingeschätzt. Klär mich auf, dann kann ich vielleicht weiterhelfen.
 
Ich gehe davon aus, dass string eine ansammlung von Zeichen ist wärend char ledeglich ein Zeichen.
Nur mit tchar kann ich überhaupt nichts anfangen.

Michi
 
Ergänzend wäre vielleicht zu erwähnen, dass das ganze folgenden Zweck hat:
Ich habe eine *.dll, die sich nicht direkt mittels Verweis einbinden lässt.

Also verwende ich:
Code:
[DllImport("hrmcom.dll")]
public static extern bool fnHRMCom_GetExeFileInfo(int iExercise, ref POLAR_EXERCISEFILE pef); //

Um die entsprechende Funktion einzeln einzubinden.
Und mittels einer Typedefinition struct möcht ich mir den Datentyp erstellen in den mir die Funktion (mittels Zeiger auf as Objekt) Daten einträgt.

Vielleicht ist dies nützlich...

Michi
 
Ein TCHAR ist ein Define, das je nachdem, ob Unicode eingestellt wurde, entweder als ein char oder ein wchar_t (char, aber 2 byte gross) behandelt wird. Da würde ich es mit einem char-Array versuchen. Was anderes fällt mir nicht ein.
 
Zuletzt bearbeitet:
Wäre es denn möglich diese Typdefinition (szName[9]) auszulassen oder es in irgendetwas brauchbares umzukonvertieren?

Danke
Michi
 
Ha, ein ganz glitze kleiner Lichtblick...
Ich hab jetzt mal einfach das TCHAR Objekt ausgeklammert.
Ich bekomme zwar immer noch eine Fehlermeldung, allerdings im darauffolgenden Objekt (int iBike) steht jetzt eine Zahl drin, die nicht korrekt ist: (iBike - 1769169218 - int)
Eigentlich kann nur 0, 1 oder 2 darin vorkommen!

Liege ich bei der Annahme richtig, dass die Objekte in der Reihenfolge, in der ich sie angegeben habe ausgegeben werden?

Danke
Michi
 
Weiterer Lichtblick:

Ich hab jetzt gleich 9 int Objekte erzeugt anstelle des TCHAR Objektes:
Code:
public struct POLAR_EXERCISEFILE
		{
			public int		iSize;					// Structure size for version control

			public int		iTime;					// Start time of exercise in seconds
			public int		iDate;					// Start date of exercise in yyyymmdd
			public int		iDuration;				// Duration of exercise in seconds
			public bool	bUSTimeMode;			// Usage of 12h time mode in exercise
			public int		iSamplingRate;			// Sampling rate of exercise
			public bool	bDeleted;				// Exercise has been marked to be deleted

			public bool	bSpeed;					// Speed sensor data available
			public bool	bCadence;				// Cadence sensor data available
			public bool	bAltitude;				// Altitude sensor data available
			public bool	bPower;					// Power sensor data available

			public bool	bInterval;				// Interval data available

			public int szName1; //[9];				// Exercise set/profile name used in exercise
			public int szName2;
			public int szName3;
			public int szName4;
			public int szName5;
			public int szName6;
			public int szName7;
			public int szName8;
			public int szName9;

			// Max number of characters is 8 + ending zero

			public int		iBike;					// Bike used at exercise (0 = off, 1 = bike1, 2 = bike2)
		}

Die Folge:
Keine Fehlermeldung mehr! Hurra!
Kann man vielleicht die Zahl jetzt in einen Buchstaben umwandeln?
Das wäre dann schon fast eine perfekte Lösung!

Danke
Michi
 
Zurück