DLLs - struct* als Parameter uebergeben
-
Hallo!
Ich habe folgendes Problem:
Ich habe eine dll geschieben, DIE PER EIGENEM TESTPROGRAMM NACHWEISLICH FUNKTIONIERT.
Ok.
Im Prinzip bietet sie nur eine Funktion an:__declspec(dllexport) int blah (struct_type * s);wobei
typedef struct { int a; int b; ...} struct_type;der Typ des Parameters ist (ca. 20 longs).
Ok. Wie schon gesagt, habe ich ein Testprogrämmchen geschieben, das mit dieser dll wunderbar wie folgt arbeitet:
__declspec(dllimport) int blah (struct_type * s); typedef struct { int a; int b; ...} struct_type; // das benutzende Programm muss den Typ natürlich auch kennen int main(){ struct_type local_struct; int retval = blah( &local_struct ); // jetzt kann mittels local_struct.a etc. auf die in der dll berechneten Werte zugegriffen werden. }Ok. Bis jetzt alles einfach. Jetzt habe ich aber ein in Visual C++ .NET (2003) geschiebenes Programm. Das kann die dll im Prinzip auch nutzen, ABER:
Obwohl der Funktionsaufruf scheinbar wunderbar funktioniert, und auch andere per Parameter übergebene (Eingabe-) Parameter in der dll verwendbar sind, gehen alle Werte, die ich IN DER DLL in den struct reinschreibe, VERLOREN.
Also in der dll
int blah(struct_type * s){ s->a = 0815; }kommt nicht in dem .NET-Programm an!
BITTE HELFT MIR, ICH BIN VERZWEIFELT
Danke im Voraus!
-
Wer ruft es denn auf??? Du redest irgendwas von ".NET"!? Wird es aus C# aufgerufen?
Auch solte man IMHO das struct so definieren:typedef struct struct_type { int a; int b; ...};Aber das wird an dem Problem vermutlich nichts ändern...
PS: Falls es doch C++ ist: Stimmt den das packing der Struktur? Ist es also in Deiner DLL gleich wie in dem aufrufenden Programm?
-
Jochen Kalmbach schrieb:
Auch solte man IMHO das struct so definieren:
typedef struct struct_type { int a; int b; ...};typedef struct struct_name { int a; int b; ...} struct_type;
:xmas2:
-
Wegen dieser totalen Verwirrung mache ich sogar immer:
typedef struct StructName { int a; int b; ...} StructName;Da geht man jedem Problem aus dem Weg...
Oder weist Du ohne nachzuschauen, was das folgende bedeutet?
typedef struct { Name() {} int a; int b; } Name;Wird "Name()" jetzt als Konstruktor aufgerufen oder nicht?
-
Jochen Kalmbach schrieb:
Wird "Name()" jetzt als Konstruktor aufgerufen oder nicht?
nö, weil die struct keinen namen hat.
überhaupt finde ich konstruktoren und methoden in structs blöd. dafür würde ich immer 'class' nehmen...
:xmas2:
-
Warum nutzen Leute mit nem C++ Compiler überhaupt noch diese typedef-Variante vom Syntax her???
Mit was für nem Compiler wurde die DLL denn erstellt?
-
Die Frage ist auch noch offen: WER verwendet die DLL WIE?