array an DLL übergeben
-
Wenn du ein Array aus 3 Elementen übergibst und nachher auf 4 Elemente zugreifst hast du glaube ich was falsch gemacht.

Abgesehen davon, dass du das Array per Value übergibst und nicht per Referenz.
Brrr...initialize ist außerdem kein schöner Klassenname. (Initialisieren ist auf Deutsch ein TUN-Wort, ein Objekt tut aber nix, das blockiert nur Speicher. Etwas tun machen nur (Member)-Funktionen (tun z.B. Objekte initialisieren). Daher kanns eigentlich keine Klasse Initialize geben, genaus wenig wie z.B. eine Funktion Haus.
-
@ Danke Mathias
Wenn du ein Array aus 3 Elementen übergibst und nachher auf 4 Elemente zugreifst hast du glaube ich was falsch gemacht.
Ja, das sieht nicht gut aus macht aber keinen Fehler - da ja nicht auf die Länge geprüft wird.
Das mit der Namensgebung habe ich noch nicht so richtig raus,
Weiß jemand ob es irgendwo einen Übereinkunft für die Namen gibt?
Ich meine jetzt Klein-Groß Schreibung, Integer immer mit kleinem i beginnen...int _stdcall Test(char* ip, int* test, int* mac[]) { initialize b1; b1.test(ip); *test=b1.iAdapternr; *mac[0]=b1.myIP[0]; *mac[1]=b1.myIP[1]; *mac[2]=b1.myIP[2]; *mac[3]=b1.myIP[3]; return 5; }Auf alle Fälle Danke an alle
-
@Mathias: Was gibt das folgende Programm aus?
#include <iostream> using namespace std; void foo(int bar[0]) { bar[1] = 4711; } int main() { int foobar[] = {23, 54}; foo(foobar); cout << foobar[1] << endl; cin.get(); }
-
Tupo13 schrieb:
Das mit der Namensgebung habe ich noch nicht so richtig raus,
Weiß jemand ob es irgendwo einen Übereinkunft für die Namen gibt?
Ich meine jetzt Klein-Groß Schreibung, Integer immer mit kleinem i beginnen...In C++ nicht. Es gibt verschiedene Notation, z.B. die ungarische von Microsoft.
-
Mathias schrieb:
Abgesehen davon, dass du das Array per Value übergibst und nicht per Referenz.
Arrays werden immer by reference übergeben.
Tupo13 schrieb:
Das mit der Namensgebung habe ich noch nicht so richtig raus,
Weiß jemand ob es irgendwo einen Übereinkunft für die Namen gibt? Ich meine jetzt Klein-Groß Schreibung, Integer immer mit kleinem i beginnen...Solche Konventionen sind mehr oder weniger willkürlich, da gibt es viele unterschiedliche Ansichten. Aber darum geht's hier gar nicht. Du hast eine Klasse, die den Namen einer Tätigkeit hat. Das ist vom Design her fragwürdig, weil Klassen eher Dinge repräsentieren, keine Tätigkeiten.
-
@MFK
@schorsch code
Danke für die Korrektur.
Ich arbeite so häufig mit Arrays, dass ich das schon wieder vergessen hatte. Mit Arrays zu hantieren ist ziemlich unschön (deshalb mach ich das auch so extrem häufig), da dass Wissen über die Größe der Arrays nur der Programmierer kennt oder sie weitergereicht werden muss. Das ist extremst gefährlich....

Nicht umsonst hat MS bei ihrem neuen Compiler alle Funktionen, die auf Arrays arbeiten um Parameter für die Größe erweitert.
-
Hallo
Ich bins nochmal und zwar funktioniert das ganze leider immer noch nicht.
es Stimmt immer nur der Wert, den ich auf die erste Adresse schreibe.
Also auf mac[0], die Werte die ich auf mac[1],mac[2]... schreibe kommen nicht anWeiß jemand warum?
int _stdcall Test(char* ip, int* test, int mac[]) { initialize b1; b1.test(ip); mac[0]=b1.myIP[0]; mac[1]=b1.myIP[1]; mac[2]=b1.myIP[2]; *test=b1.iAdapternr; return 5; }
-
Tupo13 schrieb:
int mac[]
Das geht nicht. Gib entweder die Größe an, oder benutz einen Zeiger.
-
Benutze Zeiger (da man sich sowieso nicht auf die Größenangabe verlassen kann)
-
@MFK: Was gibt das folgende Programm aus?
#include <iostream> using namespace std; int foo(int bar[]) { bar[0] = 4711; } int main() { int foobar; foo(&foobar); cout << foobar << endl; cin.get(); }
-
ich meinte
void foo(int bar[]) { bar[0] = 4711; }
-
@ all Danke für eure geduld
Ich habe jetzt diese Arten versucht
mac[], mac[3], *mac
Aber bei allen stimmt immer nur das aller erste Element.
Wenn ich in VB das Array dann Ausgebe stimmt immer nur das erste Element
mac_vb[0] alle Weiteren sind 0Woran kann das liegen?
Danke nochmal für eure Mühen
Gruß Tupo13
-
Was kommt denn raus, wenn du das Array in C/C++ ausgibst?
-
Warte mal....
du hast auf der einen Seite ein Visual Basic Array und auf der anderen Seite arbeitest du mit einem C++ Array?
Da hab ich doch den stillen Verdacht, dass VB Array nicht gleich C++-Array ist.
Sprich a[1] in VB wo anders hinzeigt wie a[1] in C++.
-
schorsch code schrieb:
@MFK: Was gibt das folgende Programm aus?
Was soll das Ratespiel? Ist dir klar, dass man diese Funktion nur mit einem Zeiger auf int aufrufen kann?
-
Wieso Ratespiel? Das war eine rethorische Frage.
MFK schrieb:
Tupo13 schrieb:
int mac[]
Das geht nicht.
Das geht nämlich als Parameter genauso wie
int *macoder aber
int mac[0]oder aber
int mac[4711]#include <iostream> using namespace std; void foo1(int *bar) { bar[0] = 4711; } void foo2(int bar[]) { bar[0] = 4712; } void foo3(int bar[0]) { bar[0] = 4713; } void foo4(int bar[4711]) { bar[0] = 4714; } int main() { int foobar; int foobars[1]; foo1(&foobar); foo1(foobars); cout << foobar << endl; cout << foobars[0] << endl; foo2(&foobar); foo2(foobars); cout << foobar << endl; cout << foobars[0] << endl; foo3(&foobar); foo3(foobars); cout << foobar << endl; cout << foobars[0] << endl; foo4(&foobar); foo4(foobars); cout << foobar << endl; cout << foobars[0] << endl; cin.get(); }
-
@ Spezi L
Wenn ich Debugge schreibt er die richtigen Werte in das mac Array@ Mathias
Du meinst also, dass ein Int in C++ nicht gleich Lang wie ein Int in VB ist?
Oder wie meinst du das?
Der erste Wert des Feldes stimmt ja und wenn ich das mit Einzelwerten int,long... mache funktioniert es ja auch
-
Ob int's die selbe Größe haben, weiß ich nicht - aber offenbar ist ein VB-Array anders aufgebaut als ein C-Array.
-
Nein, was ich meinte ist das ein C++ Array nichts anderes ist als x Variablen des angegebenen Typs hintereinander aufgereiht (z.B. x mal int).
Dies muss in VB nicht unbedingt so sein, da kann z.B. zu jedem Eintrag zusätzliche Informationen hinter dem Eintrag abgelegt sein. Dann sind die Adressen der dem ersten Eintrag folgenden Einträge nicht identisch. (VB fragt den Wert somit an einer anderen Stelle ab als ihn C++ hingeschrieben hat.)
-
Ein VB Integer hat 2 Bytes. In VB sind Arrays eh ein wenig anders, Index beginnt bei 1, UBOUND liefert den höchsten Index zurück, und es ist auch erlaubt Arrays mit 0 Elementen anzulegen und mit ReDim größer zu machen. Wie sie im Speicher liegen, weiß wahrscheinlich nur MS selbst...