DLL einbinden
-
Ich möchte eine dll einbinden. http://jabbercom.sourceforge.net/ Dazu gibt es auch ein MFC-Beispiel. Ich finde aber kein non-mfc header-file. Wie muss ich die dll einbinden und den header abändern, damit es geht? Ich hab wirklich keine Ahnung, wie das gehen soll.
.h
class CJabberSession : public COleDispatchDriver { public: CJabberSession() {} // Calls COleDispatchDriver default constructor CJabberSession(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {} CJabberSession(const CJabberSession& dispatchSrc) : COleDispatchDriver(dispatchSrc) {} // Attributes public: // Operations public: CString GetServer(); void SetServer(LPCTSTR lpszNewValue); CString GetUsername(); void SetUsername(LPCTSTR lpszNewValue); CString GetPassword(); void SetPassword(LPCTSTR lpszNewValue); BOOL GetAvailable(); void SetAvailable(BOOL bNewValue); LPDISPATCH GetRoster(); void SendMessage(LPDISPATCH Msg); void SendPresence(LPCTSTR JID, long PresenceType, LPCTSTR Status, LPDISPATCH XTag); void SendMyPresence(); void SendXML(LPCTSTR xml); BOOL GetActive(); CString GetStatus(); void SetStatus(LPCTSTR lpszNewValue); void DoConnect(BOOL NewUser, long AuthType); void DoDisconnect(BOOL Immediate); CString GetResource(); [...] void SetUseSSL(BOOL bNewValue); CString GetMsgID(); }; [dazu kommen noch mehr klassen]
helft mir bitte, ich bin ein lernwilliger n00b
-
Ist bei dem Download auch eine Datei mit der Endung .lib dabei?
Die Headerdatei, die du gepostest hast, ist vermute ich mal die Headerdatei der DLL, oder? Diese Headerdatei musst du einfach in deine Quellcodedatei einbinden wie auch jede andere Headerdatei (also #include...).
Wenn eine .lib-Datei dabei ist, dann musst du diese zu deinen Projektdateien hinzufügen. Wenn diese Datei nicht dabei ist, ist es etwas schwieriger die DLL zu integrieren. Dazu aber erst eine Erklärung, wenn nötig.
-
es handelt sich hier um eine dll. im archiv wird zu dem noch eine tlb mitgeliefert. ansonsten ist dort keine headerdatei zu finden. es gibt ein beispiel projekt. das projekt ist aber mfc. es verwendet cstrings usw. ich möchte die dll aber in eine normale konsolenanwendung einbringen. wie stell ich das an, wenn ich nur das headerfile des mfc-beispiels habe. will ich den header include so bekomme ich über 40 fehler:
Compiling... clientjabbercom.cpp g:\proggen\jabbber\clientjabbercom\jabbercomplus.h(6) : error C2504: 'COleDispatchDriver' : base class undefined g:\proggen\jabbber\clientjabbercom\jabbercomplus.h(17) : error C2146: syntax error : missing ';' before identifier 'GetServer' g:\proggen\jabbber\clientjabbercom\jabbercomplus.h(17) : error C2501: 'CString' : missing storage-class or type specifiers [usw..]
syntaktisch sollte sie aber richtig sein, denn sie läuft ja in der mfc-version. was mich verwirrt ist cstring. was ist das? gehört das zur mfc oder ist das ansi c++? Ich geh richtig der annahme, dass das headerfile mit nem classwizard gemacht wurde? wie kann icha us den infos, die ich in dem file finde, nen header machen, den ich in einer non-mfc-anwendung nutzen kann?
übrigens: http://prdownloads.sourceforge.net/jabbercom/JabberCOM_MFC-1.0.zip hier gibts das beispiel.
gruß tobias
-
CString kommt von MFC. Die benannte Klasse beim 1. Fehler, glaube ich, genauso. Der 2. Fehler ist ein Folgefehler, vermute ich.
Wenn zur DLL keine Header und erst recht keine .lib dabei ist, dann wird das etwas schwieriger. Da solltest du dir am besten mal die MSDN ( http://msdn.microsoft.com ) ansehen. Und zwar speziell die Funktion LoadLibrary() und was dazu gehört. Ein Beispiel zur Anwendung sollte auch dabei stehen. Eine bessere Lösung kenn ich leider in dem Fall nicht
-
ich werd mich mal mit loadlibrary auseinandersetzen. falls mir es aber jemand so erklären kann, dann her! thread bleibt schließlich offen. trotzdem danke aj
-
Erklärend kann ich dir nur sagen, dass LoadLibrary() eine DLL während der Laufzeit lädt und man dann mit einer anderen Funktion (den Namen weiß ich jetzt leider nicht mehr) einen Funktionszeiger auf die in der DLL zur Verfügung stehenden Funktionen (muss man bei der Funktion namentlich angeben) zurückbekommt. Mit diesem Funktionszeiger kann man dann die entsprechende Funktion der DLL aufrufen.
Ist zwar umständlich, aber ohne Objectfile (.obj oder .lib) wirst du wohl nicht anders rankommen
-
angenommen ich käme an ein headerfile, aknn ich mir das dann schenken? also eine rein hypothetische frage
-
Wie gesagt, ohne Objectfile (.obj oder .lib) gehts nicht.
-
es ist noch eine tlb vorhanden. lässt sich damit etwas anstellen?
//kann ich nicht irgendwas aus dem schon fertigen header (mfc) entnehmen. und so abändern, dass es in einer 'normalen' konsolenanwendung ohne mfc läuft?
-
Der Header allein nützt dir nichts. Ob da jetzt MFC mit drin hängt oder nicht, ist auch egal.
Was die tlb Datei ist, weiß ich leider nicht. Evtl. sind da sogar die notwendigen Daten drin und du brauchst "nur" ein Tool um daraus eine .lib oder .obj zu generieren.
Ich kann mich noch schwach daran erinner, dass wir mal aus einer Datei eine .lib gemacht haben im Zusammenhang mit dll. Leider weiß ich die Endung nicht mehr und auch nicht den Namen des Tools. Ich weiß nur, dass das Tool schon beim MSVC dabei war. Frag mal im entsprechenden Forum (für deinen Compiler) nach, ob die was drüber wissen. Vielleicht kann man dir da besser helfen.
-
Hi
Ich habe die gleichen Interessen und komme auch nicht weiter
Also die tlb ist eine Type Library/Typenbibliothek. Nun weiß ich nicht genau was das ist, aber es scheint, daß das .tlb-file auch in der DLL integriert ist (Assistenten aus VC++ können aus einer Typenbibliothek importieren und akzeptieren dabei die .dll genauso wie die .tlb)
Naja, die DLL soll ja ein COM-Server sein, daß gibts doch keine Funktionen zu importieren, oder?
Die Klasse COleDispatchDriver gehört irgendwie zu der COM-Unterstützung aus MFC - damit soll es wohl ganz einfach gehen, ich hab da aber auch noch keine Doku zu gefunden.
Ich hoffe mein Text enthält nicht allzu viele Fehlinformationen - ich bin ein Neuling in C++/MFC und versuche gerade mich da ein wenig zu orientieren, also es kann durchaus sein, daß ich da noch was falsch aufgefaßt habe.
Wenn jemand inzwischen neuere Informationen dazu hat, wie man mit oder ohne MFC JabberCOM nutzen kann, dann bitte raus damit
MfG Hirsch