Strukturfrage
-
Hi!
Ich bekomme an eine Funktion einen Pointer übermittelt, der auf
ein Speicherfeld zeigt, das folgenden Aufbau hat:
short Width; // Offset bei 0
short Height; // Offset bei 2
char Data[Width][Height][3]; // Offset bei 4 bis Width * Height * 3 + 4
also in Data werden praktisch die Pixel ausgelagert, wobei die Anzahl
variable ist. Pro pixel soll es 3 Bytewerte geben also für Red, Green und Blue.
Bloß komme ich dann nicht ganz so klar:#include "Schwellenwert.h" extern "C"{ int __declspec(dllexport) _cdecl Schwellenwert(IMAGE *in,int in_size,IMAGE *out,int out_size) { out->Width = in->Width; out->Height = in->Height; for(int x=0; x < in->Width - 1; x++) { for(int y=0; y < in->Height - 1; y++) { out->Data[x][y][0] = in->Data[x][y][0]; out->Data[x][y][1] = in->Data[x][y][1]; out->Data[x][y][2] = in->Data[x][y][2]; } } }
Schwellenwert.h:
typedef struct { short Width; short Height; char Data[][][3]; } IMAGE; extern "C"{ int __declspec(dllexport) _cdecl Schwellenwert(IMAGE *in,int in_size,IMAGE *out,int out_size); }
Der soll also die Daten von *in nach *out verschieben.
Es geht aber nicht. Liegt sicherlich an char Data[][][3];
weiss bloss nicht wie ich das angehen soll
thx schonmal!
mfg olli
-
Wie ich sehe, willts du die datenmenge per DLL weiter leiten. Jedoch kann die Software die du benutzt (ich kenne dich ja schon lange) keine datenfelder übermitteln. Da hilft es nur einen Pointer rüber zu schicken.
cu
-
ich hoffe ich liege nicht damit falsch, aber ich denke das gehört nach winapi
-
Nur weil er das ganze in einer DLL macht
Naja, egal
Also ich würde mal Vermuten, dass du den Speicher dynamisch reservieren musst (also mit new bzw. malloc)
-
Hi!
Gerard: Nee wie flenders es schon gesgat hatte. Habe nur den kompletten
Code mal offengelegt, da er nur sehr klein ist.Aber jetzt nochmal zum Problem:
Ich programmiere in einer anderen Sprache (BASIC Dialekt) und da kann
ich dynamisch nur DLL's über einen sogenannten CallDLL Befehl
aufrufen. Das sieht in etwa so aus:
InBank = CreateBank(10)
OutBank = CreateBank(10)
Wert = CallDLL("MeineDLL.dll","FunktionsnameAusDerDLL",InBank,OutBank)InBank und OutBank sind 2 allokierte Speicherbereiche vom Typ Byte.
das wäre in grundegenommen nix anderes als
new char InBank[10];
new char OutBank[10];
Dieser BASIC-Dialekt übergibt jetzt als ersten Parameter der DLL-Funktion
den Pointer bzw. die Adresse auf den allokierten Speicherbereich InBank.
Der 2. ist die größe in Byte für diesen Speicherbereich(in den obrigen
Bsp. wären es z.B. 10 Byte). Und das ganze für OutBank im 3. und 4. Parameter.
Die Funktion selber kann einen Integerwert zurückgeben.So wie die Werte übergeben werden, kann man nix dran rütteln.
Deswegen will ich die größe (Width und Height) sowie die Pixeldaten
selber in den Speicherbereich InBank einbinden. Klappt auch wunderbar,
bloß jetzt will ich in C++ eben Width, Height und die Daten für die Übersicht-
lichkeit in eine Struktur speichern, die eben Width und Height als Short,
sowie die Pixeldaten in Form eines Arrays mit folgenden Aufbau:
Data[X][Y][0] = Rot
Data[X][Y][1] = Grün
Data[X][Y][2] = Blau
auslesen. (Rot Grün und Blau natürlich vom Typ char)
Ich hoffe ihr wisst wie ich das meine.
mfg olli
-
Also ich kann mir nich vorstellen, wie das mit der Struktur so klappen soll
Du willst aber im Endeffekt die Daten schon nicht nur kopieren, sondern auch manipulieren, oder?
wenn du aber unbedingt [] verwenden willst wird du dir wohl eine Klasse schreiben müssen, und den [] operator überladen