Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Win32 dll in vc++.net2003 erstellen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
13.02.2006, 15:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


__stdcall macht nix anderes als zu sagen externe C-Bindung, parameter links nach rechts (so grob gesagt)

__declspec macht das nicht, das ist "declaration-specification, also z.b mit dllexport wird dem (vc-)compiler angewiesen, die funktion zu exportieren.

Hmm, evtl optimiert er dir wegen einem dieser fehlenden Flags die Funktion einfach raus?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
13.02.2006, 16:03 Uhr
xenayoo



Danke, ich werde es mal ausprobieren. Ich habe es im MSDN immer so verstanden, als ob man etweder __stdcall ODER __declspec verwendet. Wenn ich also:


C++:
int __stdcall __declspec(dllexport) FunktionsName(int Parameter...)

eingebe, kann ich auf des def-File verzichten.
--
Wer Rechtschreibfehler findet, darf sie behalten.... ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
13.02.2006, 20:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok, hab nochmal nachgelesen:

__stdcall:

Argumentreihenfolge: Right to left
Argumentübergabe: ByValue außer explizit ByRef
Stack: funktion hat eigenen stackframe (also räumt selbst auf)
Namensgebung: func(int a, double b) wird zu _func@12

um diese extension da wegzukriegen, (sonst findet er die funktion mit dem namen "func" bei der angabe von GetProcAdress nicht) musst du soviel ich nun gefunden hab an Infos explizit extern "C" angeben.

__declspec(dllexport) ist unabhängig davon, das sagt dem vc-compiler nur: "optimier die funktion nicht raus sondern exportier mir die funktion (,du arsch )!"
--
class God : public ChuckNorris { };

Dieser Post wurde am 13.02.2006 um 21:20 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
14.02.2006, 09:12 Uhr
xenayoo



Danke FloSoft, so ähnlich hab ich es aus den MSDN nach mehreren Anläufen auch rausgelesen.

Ich hatte gestern abend mit DllFunc mal nachgesehen, wie denn die exportierten Funktionsnamen aussehen. Es erschien das totale Chaos. Es war kein einziger Name im Klartext lesbar.

Was also in VC++6 so geschrieben wurde (mit separatem DEF-File):

C++:
int __stdcall FunktionsName (int Parameter,...)

muss in VC++.Net2003 so aussehen (ohne DEF-File):

C++:
extern "c" __declspec(dllexport) int FunktionsName (int Parameter,...)


und schon habe ich die benötigten Funktionsnamen im Klartext. Da mauß man erst mal darauf kommen.

Vielen Dank für die schnelle Hilfe. Die M$-Community hat sich bis heute noch nicht gemeldet.... Ich werde wohl noch viele, viele mehr oder weniger intelligente Fragen hier stellen und hoffe irgendwann auch mal anderen helfen zu können....
--
Wer Rechtschreibfehler findet, darf sie behalten.... ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
14.02.2006, 09:26 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Was heißt da muss man erstmal drauf kommen?
Funktionsexporte sollten generell so aussehen und Flo hat dich in seinem allerersten Post gefragt ob du es so gemacht hast!

Dieser Post wurde am 14.02.2006 um 09:27 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
14.02.2006, 11:03 Uhr
xenayoo




Zitat von Guybrush Threepwood:
Was heißt da muss man erstmal drauf kommen?
Funktionsexporte sollten generell so aussehen und Flo hat dich in seinem allerersten Post gefragt ob du es so gemacht hast!


Nicht böse sein. Ich sagte bereits, dass ich kein Proficoder bin und mir die Grundlagen der dlls fehlen. Somit mußte ich erst mal die Unterschiede und die Syntax analysieren. Es ist sicher richtig, dass Funktionsexporte generell so aussehen sollten. Sie taten es bisher nicht, weil es bei vc++6 in der von mir beschriebenen Art funktionierte und weil mein "Lehrer" die Grundlagen von dlls selbst nicht kennt.
Ich habe aber auch gesagt, dass ich für mich dieses Manko gerne ausbessern würde und bin offen für geeignete Dokumentationen (Hierzu zähle ich allerdings nicht die MSDN!).
--
Wer Rechtschreibfehler findet, darf sie behalten.... ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
22.02.2006, 16:12 Uhr
xenayoo



Ok, eine kurze Info für alle, die es interessiert:

Es ist alles ganz anders: Auch die dlls mit
C++:
extern "c" __declspec(dllexport)....
funktionierten nicht. Zwar konnte ich mittels dllfunc korrekt die externen Funktionen sehen, aber die dlls funktionierten nicht mit meinem Programm. Auf die Lösung kam ich, als ich mal die Projekteigenschaften von vc++6-Projekten mit den von vc++.net2003 verglich: Wenn ein neues Projekt in vc++.net2003 angelegt wird, kann das System den Namen der Moduldefinitionsdatein nicht wissen und legt folgedessen den Pfad nicht an. So hatte ich zwar die Dateien der vc++6-Projekte mittels "Projekt - bekannte Elemente hinzufügen" geladen und die DEF-Datei war vorhanden, aber sie war in den Projekteigenschaften nicht definiert.
Beim Compilieren wurde kein Fehler ausgeworfen. Logischerweise konnte mit dllfunc keine Funktion sichtbar gemacht werden, da eben keine def-Datei angegeben war.....
Fazit: viel gelernt, und jetzt geht's wieder...
--
Wer Rechtschreibfehler findet, darf sie behalten.... ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: