Mehrdimensionales Array zu DLL

T_55

Lieutenant
Registriert
Feb. 2013
Beiträge
643
Hallo,

ich möchte die Werte eines Mehrdimensionalen Arrays aus einem C Programm einer DLL zur Verfügung stellen und komme nicht ganz weiter. Ich vermute mit den Pointeraspekten * & läuft was noch nicht... Ich habe alle mögliche probiert und immer kommt ein Fehler wie "Access violation read to 0xDA9003EF" Bestimmt irgend ein blöder Anfängerfehler mal wieder, ich bin da noch etwas Newbiemäßig unterwegs mit Pointern.

Programm C-Code:

Code:
#import "DLL.dll"
double Array(double &Werte[][10]);
#import

double array[][10];

//test
array[0][2] = 999.999;

double rueckgabewert;
rueckgabewert = Array(Werte);


DLL C++ Code:

Code:
#include "stdafx.h"

__declspec (dllexport) double array(double *Werte[][10])

double test;
test = WerteWerte[0][2];

return ((double)test);
 
Hier ist die Meldung mit der ich aber leider nichts anfangen kann:

error C2440: '=': 'double *' kann nicht in 'double' konvertiert werden
Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
 
Zuletzt bearbeitet:
2-dimensionale Arrays lassen sich immer auch als eindimensionale Arrays speichern, wenn die Spaltenanzahl in jeder Zeile gleich ist. Für 5x3 zum Beispiel int array[5*3]; und der Index ist dann zeile*3+spalte.

Vielleicht hilft dir das weiter, ich bin nämlich gerade ratlos, was dein Code machen soll. Was soll das & in der Funktionsdeklaration im C-Code bewirken? Wieso hast du in der DLL ein Array aus double* und in C ein Array aus double?
 
Hallo danke schon mal,

also im Prinzip will ich ja nur, dass ein Zweidimensionales Array zB array[1000][10]; welches im Programm ist über die Funktion der DLL zur Verfügung gestellt wird (Spaltenanzahl sollte auch unterschiedlich möglich sein). Soweit ich weiß geht das über eine Funktion allerdings habe ich mir den Rest etwas zusammengebastelt wie man sieht ;)
Was bedeutet Dereferenzieren vergessen also wo? Hat vielleicht noch jemand eine Idee wie der Code aussehen müsste um ein Zweidimensionales Array der DLL zur Verfügung zu stellen?

Gruß
 
Wenn du ein Array übergeben willst, dann mit double*. Wenn du Arrays mit unterschiedlicher Länge machen willst, dann mit double**. Dann musst du aber irgendwie noch die Länge der Arrays mitübergeben.
Ich empfehl dir:
a) C und C++ nicht zu mixen (also als Pointer übergeben und dann als Referenz deklarieren). Entweder mit Referenz oder Pointer arbeiten. In deinem Fall ganz klar nur mit Pointern.
b) Dich noch mal mit Pointern zu beschäftigen (vor allem was a macht ( *(a+b) )).
c) Nochmal nachlesen, wir Arrays in C funktionieren (wo die Größe gespeichert wird z.B.).
c) Fehlermeldungen zu lesen und zu verstehen versuchen. Der C2440 ist eine einfacher Fehler (siehe b)).

Ich denke, du bist noch ein relativ unerfahrener Programmierer. Ich empfehle dir, erst mal kleinere Brötchen zu backen, bevor du dich an DLLs machst. (DLLs bieten keine Typsicherheit, man hat namr mangling, man muss dir richtige calling convention verwenden, etc.)
 
Zurück
Oben