# Array in Header Datei deklarieren und auslesen



## Boni (8. Mai 2010)

Hallo zusammen

Also ich bin ein Anfänger im C/C++ und versuche gerade etwas bei dem ich leider stecken bleibe.
Also folgendes ich hab im VBA ein Interface erstellt in der, der Benutzer etwas eingeben kann.  (Richtung, Geschwindigkeit eines Fahrzeugs)
Diese Daten soll mir das VBA Programm in eine Header Datei abspeichern damit ich sie via C aufrufen kann.

*Beispielinhalt test.h:*

```
//l steht für links
//r steht für rechts
//g steht für gerade

#define GESCHWINDIGKEIT1 200
#define RICHTUNG1 'l'
#define GESCHWINDIGKEIT2 255
#define RICHTUNG2 'r'
#define GESCHWINDIGKEIT3 180
#define RICHTUNG3 'g'
```

Dies kann ich wie oben schon machen aber da die Eingabe immer unterschiedlich ist kenn ich die genaue Befehlsgrösse nicht.
Daher wäre es eventuell praktisch ein Array zu machen. Leider sind meine Bemühungen ein Array in der Header Datei zu erstellen und danach mit dem C Programm aufzurufen bisher alle fehlgeschlagen.
Also die Grösse des Arrays kann ich dann ja via VBA bestimmen.

Meine Vorstellungen:

*Inhalt der test.h:*

```
//l steht für links
//r steht für rechts
//g steht für gerade
//anzbefehle wird mithilfe von vba ausgelesen (Anzahl Befehle)

int anzbefehle = 3;
//Arrak deklaration
char RICHTUNG(anzbefehle);
int GESCHWINDIGKEIT(anzbefehle);

//Array den Wert zuweisen
GESCHWINDIGKEIT[0] = 200
RICHTUNG[0] = 'l'
GESCHWINDIGKEIT[1] = 255
RICHTUNG[1] = 'r'
GESCHWINDIGKEIT[2] = 180
RICHTUNG[2] = 'g'
```

Hat vielleicht jemand ne Idee wie ich dies umsetzen kann?
Andere Lösungsvorschläge sind natürlich auch gerne gesehen aber am liebsten wäre es mithilfe der header Datei.

Gruss
Böni


----------



## ComFreek (8. Mai 2010)

Man kann Konstanten (hier mit define) nicht ändern.
Ich denke mal du willst immer 3 Felder pro Array haben, oder? 

```
int Geschwindigkeit[3];

...
Geschwindigkeit[0]=180;
...
```
Falls du variable Länge der Arrays willst, bieten sich Vektoren an:

```
#include "vector.h" // Stimmt das? 

std::vector<int> Geschwindigkeit;

Geschwindigkeit.push(180);
int lesen = Geschwindigkeit.at(0);
```


----------



## Boni (8. Mai 2010)

Hallo

Nein leider nicht immer die feste Grösse von 3.
Die grösse variert immer. Je nachdem was der Benutzer im VBA interface eingibt kann es von 1 - soviele man halt eingibt gehen.

Das mit den Vektoren versteh ich nicht ganz was bringt mir das?

Gruss Böni


----------



## ComFreek (8. Mai 2010)

Die Vektoren bringen die eine variable Größe  -  soviele Eingaben, wie der Benutzer macht.

```
int Geschwindigkeit[3];  // Begrenzt auf 3 Felder
std::vector<int> Geschwindigkeit;  // Eigentlich unendlich viele Felder

// Es gibt noch eine dritte Möglichkeit:
int *Geschwindigkeit = new int(x);
```

Vielleicht könnte ich dir mehr helfen, wenn ich weiß wie deine Applikation aussehen soll? Was VBA mit C++ zu tun hat?


----------



## Boni (8. Mai 2010)

Hallo

Also das VBA Programm generiert nur ein File. Und mit diesem File (am besten als header) arbeite ich dann weiter in C.
Also Ablauf:

1. Benutzer startet VBA Programm.
2. Drückt ein paar Tasten^^ (also welche Richtung und wie schnell das Fahrzeug fährt)
3. Diese Eingaben werden in ein File gespeichert.
Und dieses File macht mir Probleme. Wie muss dieses File aussehen damit ich es eben als header benutzen kann.
Da ich dafür halt am besten mit Array arbeite. Und die Frage lautet wie sieht die Syntax im Header File aus damit ich im C damit arbeiten kann.

Gruss
Böni


----------



## ComFreek (8. Mai 2010)

Dein File wird doch von VBA dynamisch generiert, da musst du doch das Programm immer neu kompilieren.


----------



## Boni (8. Mai 2010)

Hallo

Ja schon aber VBA generiert ein File. Danach startet man das C Programm und das arbeitet dann mit dem File.
In diesem File sind dann alle benötigte Daten als Variablen gespeichert nämlich als Array und wie funktioniert das?

Gruss
Böni


----------



## Traveller (9. Mai 2010)

Nur mal als Vorschlag:

Statt Daten per VBA in eine Datei zu schreiben, diese dann mit C/C++ auszulesen und zu bearbeiten geht das generell auch anders.
Wenn beide Anwendungen auf dem selben Rechner laufen, kann man in C/C++ eine DLL, meinetwegen auch eine statische Lib, schreiben und diese dann in VBA einbinden. Ist nicht ganz so einfach, aber wohl die bessere Lösung.
Bei Verteilten Systemen bietet sich XML-RPC / SOAP an, obwohl ich da nicht sicher bin, inwieweit VBA es unterstützt.


Traveller


----------



## Jennesta (9. Mai 2010)

Alternativ würde ich einfach die Daten statt in eine header in eine text Datei schreiben und diese mit C auslesen. Somit entfällt das neukompilieren und das auslesen sollte nicht so schwer sein, auch bei dymanischer Anzahl von Werten.

Gruß


----------

