dll .h und .lib erzeugen?
-
ich habe jetzt die Klasse ins standart-C++ übertragen. ging leichter wie ich erst dachte.
wenn ich das jetzt kompiliere. kommt entweder eine .lib raus. oder eine .dll, jenachdem ob es eine statische oder dynamische klassen-dll ist. ich glaub ich hab da was noch nicht verstanden.
wird eine statische bilbiothek in das programm durch den counter integriert? und eine dynamische als .dll eingebunden?gruß
lom
-
Schau mal auf Codeproject, da gibt es genügend Beispiele wie man DLLs erstellt.
Der "trick" dabei: Du musst Deine Klasse als "__declspec(dllexport)" markieren!
-
Danke, das wars. ich hatte noch ein paar linkerprobleme. musste erst die PSDK richtig einstellen.
die headerdatei ist die selbe wie ich sie beim compilieren benutze?
-
xlomx schrieb:
die headerdatei ist die selbe wie ich sie beim compilieren benutze?
Die Frage verstehe ich jetzt nicht ganz...
Aber als Anmerkung:
I.d.R. macht man in dem DLL-Projekt ein Define "NAMEDERDLL_EXPORTS" (o.s.ä.) und dann ein#ifdef NAMEDERDLL_EXPORTS #define NAMEDERDLL_API __declspec(dllexport) #else #define NAMEDERDLL_API __declspec(dllimport) #endifund dann kannst Du "NAMEDERDLL_API" einfach vor die Klasse/Methode/Daten schreiben:
class NAMEDERDLL_API TestClass { public: TestClass(void); // TODO: add your methods here. }; extern NAMEDERDLL int g_iDaten; NAMEDERDLL int TestFunction(void);Somit kannst Du dann die Header-Datei sowohl in dem DLL-Projekt verwenden, als auch mit der DLL mitliefern und in dem "Anwendungsprojekt" verwenden.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
@jochen Kalmbach
du bist eine große hilfe danke. das mit den codebeispiel hab ich verstanden.
jetzt hab ich noch mehr in foren und tutorials gelesen und noch mehr verstanden. ein paar fragen sind aber noch.
Wie kann ich nur einige funktionen einer klasse exportieren? und gut wäre es auch eine andere headerdatei mit nur diesen funktionen zu haben. so das die nicht geflutet ist mit funktionen die alle importiert werden müssen.
-
Du kannst nicht nur bestimmte Funktionen aus einer Klasse exportieren. Das geht aus Gründen der vtable nicht... sonst kann der Compiler keinen richtigen Code für den Methodenaufruf erzeugen.
Du kannst höchstens eine Klasse machen, welche Du exportierts und Du verwendest intern eine Klasse, welche Du nicht exportierst. Das ist zumindest eine "saubere" Lösung.
-
Jetzt hab ich eine weile rumgeschrieben und eine menge gelesen, das ist mir alles sehr suspect.
ich habe eine klasse geschrieben, kompiliert wird sie. Ich habe darauf geachtet standart-c++ zu schreiben. damit man die überall unter windows verwenden kann.
jetzt wollte ich die testen, jetzt meckert visual studio
"Der" kann nicht als Member von "APMTEST::Form1" (verwaltet) definiert werden: Gemischte Typen werden nicht unterstützt.Also kann ich kein objekt global anlegen, was wiederum dazu führt das ich in unterschiedlichen funktionen nicht auf das nicht angelegte objekt zugreifen kann

-
Du machst kein Standard C++ sondern C++/CLI!
Setze den Schalter "Configuration properties|Common language runtime support" nach "No Common Language Runtime support"
-
ja ich weiß,
die DLL ist in standard C++ geschrieben, da bin ich sicher. nur wollte ich die Dll in eine C++/CLI projekt verwenden, was ja eigendlich gehen sollte oder?
-
Ja geht.
Aber Du kannst (unmanaged) Klassen in einer managed Klasse nur verwenden wenn diese als *Zeiger* definiert sind!Also anstelle
ref class Foo { CUnmanagedClass a; };schreibst Du:
ref class Foo { CUnmanagedClass *pa; };(und legst die Instanz natürlich im Konstruktor oder sonstwo an; natürlich musst Du sie auch wieder irgendwo freigeben (siehe IDispisable bzw. ~ oder !)