return STRUKTUR ???
-
hier stand blödsinn
-
sollte er aber das ist ja meine Struktur
-
Poste mal den betreffenden Code
-
struct design { int edittop; int editleft; int buttontop; int buttonleft; int texttop; int textleft; int tabletop; int tableleft; int timeformstop; int timeformsleft; }; #ifdef _MANAGED #pragma managed(push, off) #endif design d; int WINAPI DllMain( HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved ) { return TRUE; } EXPORT design CALLBACK SetDesign(int x) { if( x == 0 ) { d.edittop = 13 ; d.editleft = 45 ; } return d; } #ifdef _MANAGED #pragma managed(pop) #endif
-
struct design { int edittop; int editleft; int buttontop; int buttonleft; int texttop; int textleft; int tabletop; int tableleft; int timeformstop; int timeformsleft; }; int WINAPI DllMain(HINSTANCE, DWORD, PVOID) { return TRUE; } EXPORT design CALLBACK SetDesign(int x) { design d; if(x == 0 ) { d.edittop = 13; d.editleft = 45; } return d; }... aber wo isn der Sinn?

-
der Sinn soll sein das mir die Dll die Struktur zurückgibt. Das Programm aus dem die Dll aufgerufen werden soll wird die gleiche Struktur definiert bekommen und dann die Werte von der aus der dll annehmen.
Schematisch also so:Programmstruktur = SetDesign(0) ; // Set Design gib ja ne Struktur zurück
So wars gedacht
-
so ich hab jetzt nochmal in nem anderen Buch nachgeguckt und die Schreibweise von dort verwendet und jetzt kann ich die dll kompilieren:
extern "C" { design d; int WINAPI DllMain( HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved ) { return TRUE; } __declspec(dllexport) design SetDesign(int x) { if( x == 0 ) { d.edittop = 13 ; d.editleft = 45 ; } return d; } }
-
Die Variable d kannst du ja eh in der SetDesign drinbehalten..nur außerhalb der if-Anweisung

Das war damit gemeint, musst sie ja nicht gleich global setzen
-
jetzt stellt sich noch ein anderes ähnliches Problem. Ich benutze jetzt folgende Schreibweisen und Dateien:
design.dll :
struct design { int edittop; int editleft; int buttontop; int buttonleft; int texttop; int textleft; int tabletop; int tableleft; int timeformstop; int timeformsleft; }; #ifdef _MANAGED #pragma managed(push, off) #endif extern "C" { design d; int WINAPI DllMain( HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved ) { return TRUE; } __declspec(dllexport) struct design SetDesign(int x) { if( x == 0 ) { d.edittop = 13 ; d.editleft = 45 ; } return d; } } #ifdef _MANAGED #pragma managed(pop) #endifprogramm.exe :
extern "C" __declspec (dllexport) struct design SetDesign(int); #pragma comment(lib,"design.dll") struct design { int edittop; int editleft; int buttontop; int buttonleft; int texttop; int textleft; int tabletop; int tableleft; int timeformstop; int timeformsleft; }; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); design design; ... LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: { design = SetDesign(0) ; ...dabei habe ich natürlich wieder was falsch gemacht denn der Kompiler meldet:
error C2526: 'SetDesign': Funktion mit C-Bindung kann C++-Klasse 'design' nicht zurückgebenerror C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'void' akzeptiert (oder keine geeignete Konvertierung möglich)
.\Lateinübersetzer 4.0.cpp(28): kann 'design &design::operator =(const design &)' sein
bei Anpassung der Argumentliste '(design, void)'Wenn mir da jetzt noch weitergeholfen würde wäre ich überglücklich
-
Pack *alles* in
extern C { ...}-Blöcke.
-
meinst du mit *alles* auch das Programm welches die die Dll benutzt??
Soll ich da etwa das ganze Programm oder nur
__declspec (dllexport) struct design SetDesign(int);
einrahmen

-
Damit meine ich die Funktion(s-Deklaration + Definition), und die Strukur (Definition und Deklaration); sowohl in Dll als auch im Programm. Den Aufruf natürlich nicht. Die DllMain natürlich auch nicht.
-
Also vereinfacht so: ?
dll:int WINAPI DllMain( HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved ) { return TRUE; } extern "C" { struct design { int x; int y; }; __declspec(dllexport) struct design SetDesign(int x) { design d; if( x == 0 ) { d.x = 1 ; d.y = 2 ; } else { d.x=0; d.y=0; } return d; } }Programm:
#pragma comment(lib,"dlltest.dll") extern "C" { struct design { int x; int y; }; __declspec (dllexport) struct design SetDesign(int x); }Denn da bekomme ich wieder nen Fehler ich hätte ein ungültiges Bibliotheksformat
-
Sorry, vergessen #pragma comment(lib,"dlltest.dll") in #pragma comment(lib,"dlltest.lib") zu ändern
-
Vielen Dank für die investierte Gedult und Ausdauer jetzt funktioniert alles wie gewünscht

-
Naja mit
#pragmaDLL's zu linken, ist auch etwas difus
.
-
warum??
-
und weis du (oder jemand anders), wie ich folgenden Fehler behebe?
__declspec(dllexport) struct vok Traduct() { vok VOK; return VOK; }der meldet mir ein Warning für return VOK und zwar "Die nicht initialisierte lokale Variable "VOK" wurde verwendet." aber ich hab doch vorher vok VOK geschrieben. Das ist insofern von bedeutung ,das mir dies im Hauptprogramm zum Problem wird.
PS. vok ist schonwieder ne andere Struktur. Ich hab die dll im Debugmodus, alles funktionierte wie es soll und aufeinmal kam diese meldung dazwischen
-
noha schrieb:
warum??
Weil man damit Libraries linkt
.noha schrieb:
und weis du (oder jemand anders), wie ich folgenden Fehler behebe?
__declspec(dllexport) struct vok Traduct() { vok VOK; return VOK; }der meldet mir ein Warning für return VOK und zwar "Die nicht initialisierte lokale Variable "VOK" wurde verwendet." aber ich hab doch vorher vok VOK geschrieben. Das ist insofern von bedeutung ,das mir dies im Hauptprogramm zum Problem wird.
PS. vok ist schonwieder ne andere Struktur. Ich hab die dll im Debugmodus, alles funktionierte wie es soll und aufeinmal kam diese meldung dazwischen
Du definierst nur eine Variable der Struktur, initialisierst diese aber nicht...einfaches Beispiel:
int i; // Definition i = 6; // Initialisierung
-
Ahso ich wusste garnicht das das so schlimm ist das mir gleich ne riesige Fehlermeldung in den Bildschirm springt (Wohlbemerkt im Debugmodus). Aber jetzt weis ichs wie noch viele andere Sachen im Bezug auf dlls und Strukturen

Dankeschön