www.mikrocontroller.net

Forum: PC-Programmierung C# Array of Struct in Struct Hilfe!


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
typedef struct
{
CLS_NUMBER_OF_SWITCHES  numOfLogins;
  CLS_AGENT_ACTIVITY  pAgentInfo[5];
}
  CLS_AGENT_INFO, *PCLS_AGENT_INFO;

typedef struct
    {
        CLS_SWITCH_ID       lSwitchId;      //  Identification of switch 
where agent is defined
        CLS_AGENT_ID        lAgentId;       //  A number identifying the 
trader/agent
        CLS_STATION_EX      cStation;       //  Directory/Extension or 
desk number for station/turret
        CLS_AGENT_STATE     lNewState;      //  A code indicating the 
new agent state
  CLS_AGENT_NAME      cAgentName;
  char                Reserved[79];
    }
        CLS_AGENT_ACTIVITY,*PCLS_AGENT_ACTIVITY  ;


[StructLayout(LayoutKind.Sequential)]
      public struct CLS_AGENT_ACTIVITY
    {
      public Int32    lSwitchId;
      public Int32        lAgentId;
      [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=21 )]
      public string    cStation;
      public Int32    lNewState;
      [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=21 )]
      public string    cAgentName;
      [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=80 )]
      public string    Reserved;
    }
    [StructLayout(LayoutKind.Sequential)]
      public struct CLS_AGENT_INFO
      {
        public  Int32 numOfLogins;
        public  CLS_AGENT_ACTIVITY LoggedAgents;

Hab hier zwei Structuren in C++ welche für Funktionsaufrufe verwendet 
werden und in einer DLL eingebunden sind.
Ich muß nun diese Strukturen in C# definieren und verwenden, das 
funktioniert nicht 100%.
Wie definiere ich das Array mit 5 Strukturen pAgentInfo[5] in der 
Struktur CLS_AGENT_INFO in C# ?
Ich bekomm es nur hin da eine Struktur hinzubiegen, das Array schaff ich 
nicht. HILFE!!

Für jede Hilfe bin ich vorab sehr dankbar, hab im Internet nichts 
gefunden.

Gruss
Thomas

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Thomas,

kannst du noch n bisschen mehr Info geben? WAS geht nicht? Lässt es sich 
nicht kompilieren, oder verhält es sich einfach nur nicht, wie du es 
gerne hättest?

Ralf

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Thomas!

Versuche es doch mal damit:
    public struct CLS_AGENT_INFO {
        public Int32 numOfLogins;
        public CLS_AGENT_ACTIVITY[] LoggedAgents;

        public CLS_AGENT_INFO( Int32 numOfLogins ) {
            this.numOfLogins = numOfLogins;
            LoggedAgents = new CLS_AGENT_ACTIVITY[5];
        }
    }
Der Hintergrund ist folgender: In C# werden structs fast wie Klassen 
behandelt. Du kannst also auch Konstruktoren für structs definieren, in 
manchen Fällen musst Du sogar Konstruktoren verwenden.

Gruß
Markus

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke sehr, das hat geholfen.
Ich war ein Paar Tage offline.
Was nicht funktionierte hat sich nachher als ein Problem ganz waonders 
herausgestellt.

Besten Dank nochmals,
Gruss
Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.