Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++ Klasse in dll

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 ]
000
09.07.2004, 16:20 Uhr
~SwordMaster
Gast


Hi leute

wie kann ich wenn ich eine c++ dll erstelle
eine komplette klasse so deklarieren


dass man sie aus der dll laden kann?
geht dass?


ich hab bisher immer nur einzelne Funktionen in der dll als extern deklariert

z.b.

C++:
extern "C" HICON __declspec(dllexport) getMyIcon(LPTSTR Filename)
{
    HICON test;
    return test;
}




Weiß jemand wie ich dass mit einer ganzen klasse mach??
wär echt nett!!

Danke SwordMaster

Dieser Post wurde am 10.07.2004 um 10:06 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.07.2004, 17:01 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Genauso?


C++:
class __declspec(dllexport) foo
{
      foo()
      {
      }
      int funktion1(int i)
      {
           return i+2;
      }
};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.07.2004, 18:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


und in dem Ziel-projekt dann eben class __declspec(dllimport) foo;
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.07.2004, 17:23 Uhr
~SwordMaster
Gast


Hab mir jetzt eine klasse geschrieben.

Danach hab ich ein neues Projekt erstellt und meine Lib datei im Projekt bei "Linker" hinzugefügt....

aber wenn ich jetzt schreibe

class __declspec(dllimport) CMyClass;
CMyClass test;
test.ShowWindow(false);


kommt der Fehler:

-test verwendet undefiniertes class CMyClass

was mach ich falsch?

Danke für eure hilfe! Bin echt dankbar!
SwordMaster
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.07.2004, 18:04 Uhr
~SwordMaster
Gast


Also den fehler hab ich weggebracht

wußte nicht dass ich die ganzen Methoden beim importieren nochmal "Definieren" muß....

aber jetzt hab ich ein anderes problem....

also wie gesagt ich hab bei Visual Studio 6.0
unter Projekt->Einstellungen->Linker->Objekt-/Bibliothek-Module:

"CForeignAPI.lib " eingetragen


aber jetzt wenn ich meine Anwendung starte (Compilieren kann ich!)
kommt der fehler
"Die Anwendung konnte nicht gestartet werden, weil ForeignAPI.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben."

Aber wieso sucht er nach der DLL?? ich hab ja eine *.lib datei!
und dennoch... die *.dll würde sich im gleichen ordner wie die lib datei befinden....

kein plan was der von mir will!
kann mir jemand helfen???

Danke SwordMaster
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.07.2004, 18:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, die dll muss entweder im ausführbaren verzeichnis (wenn du über debugger startest bei vc ist das der "grund"-ordner, also nicht release oder debug)

oder im windows-system verzeichnis sein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.07.2004, 19:38 Uhr
~SwordMaster
Gast


oh ja, danke jetzt gehts!!

aber unser lehrer hat mal gesagt:

"Bei einer *.lib datei wird der code direkt zur exe dazucompiliert....
bei einer *.dll wird er zur laufzeit geladen.... also muß man die dll mitkopieren wenn man das programm kopiert"

hat er sich geirrt?
oder wieso brauch ich obwohl ich eine *.lib datei benutze noch eine *.dll
die ich noch dazu mitkopieren muß?

Danke nochmal für deine schnelle hilfe!
ciao SwordMaster
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.07.2004, 21:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, mit der lib, welche einer dll "beiliegt", wird deinem programm nur gesagt, wo er die funktion in der dll findet. Man könnte evtl dazu sagen das in dieser lib dann eine Art "Prototypen" der Funktionen definiert sind.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.07.2004, 09:50 Uhr
RHBaum



erzaehl ihm nix falsches ....

die prototypen stehen meist in der .h datei, die zu geliefert wird, ohne der kannst die dll eh kaum verwenden, es sei den du hasst ne gute doku. (wonach du dir die h datei dann selber schreiben kannst )

zum laden entladen schau dir Loadlibrary, FreeLibrary und GetProcAdress an, das brauchst, wenn die dll per hand laden willst

Die .lib nimmt dir meist diese grundlegenden taetigkeiten ab. Wird bei bestimmten DLL projecten soweiso mitgeneriert. aber es hindert dich keiner, die dll direkt anzusprechen ....
und ja, die lib wird fest dazugelinkt ...

Generell, Klassen uber dlls zu exportieren ist nicht standardisiert. Sprich du lieferst dich mit gedeih und verderb deinen compiler aus. und diese versagen teilweisse schon bei unterschiedlichen version.
Wenn sicherstellen kannst, das das nutzende programm immer mit dem selben compiler ubersetzt wird, wie die dll, isses ok . aber dlls mit anderen compiler (version) nachcompiliert und nachgeliefert, funzt dann nimmer.
Und genau das widespricht einem der prinzipien von dynamischen libraries.

Ciao ...

Dieser Post wurde am 16.07.2004 um 09:52 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.07.2004, 13:29 Uhr
~SwordMaster
Gast


Hi!
mit anderen worten ich kann meine C++ Dll mit meiner klasse
nicht in VB hernehmen?

is ja doof!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: