Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Arbeiten mit Objekten zwischen DLLs

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 <
000
09.10.2018, 20:55 Uhr
Stefan_Sch



Hallo,

ich habe eine Frage. Um mit Funktionen aus anderen DLLs zu arbeiten, muss man diese ja exportieren.


C++:
#if defined(_MSC_VER)
#include <windows.h>
#define DLL   extern "C" __declspec(dllexport)
#else
#define DLL
#endif

// Die Funktion, die anderen Programmen zur Verfügung gestellt werden soll
// (in diesem Beispiel: Addieren zweier Zahlen)

DLL double AddNumbers (double a, double b)
{
    return a + b ;
}



Ich habe in einer DLL einen Shared Pointer von einem Objekt A. Das Objekt A wird nicht importiert.

Deshalb meckert der Compiler mit Linker Fehler 2019.

Ist es möglich das Objekt A über ein Interface (std::shared<InterfaceA> zu nutzen ohne die DLL mit Objekt A importieren zu müssen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.10.2018, 13:59 Uhr
ao

(Operator)


DLL? Ab in die Microsoft-Ecke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.10.2018, 14:05 Uhr
ao

(Operator)



Zitat:
Ist es möglich das Objekt A über ein Interface (std::shared<InterfaceA> zu nutzen ohne die DLL mit Objekt A importieren zu müssen?

Schau mal hier. Ist holperiges Englisch, hilft aber vielleicht trotzdem weiter.

https://stackoverflow.com/questions/10936302/how-to-call-pure-virtual-functions-in-dll-from-exe-application

Dieser Post wurde am 10.10.2018 um 14:09 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.10.2018, 03:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,

extern "C" ist btw nicht nötig, wenn du die DLL per Header+Lib verwendest, C-Interface für DLLs ist nun schließlich inzwischen auch schon "etwa" 1980.

Visual Studio erzeugt einem bei DLL Projekten automatisch ein Define "PROJEKT"_EXPORTS

du kannst auch Klassen exportieren, Beispiel-Projekt "MYCPPDLL"


C++:
#ifdef _WIN32
#ifdef MYCPPDLL_EXPORTS
#define MYCPPDLL_API __declspec(dllexport)
#else
#define MYCPPDLL_API __declspec(dllimport)
#endif
#else
#define MYCPPDLL_API
#endif


class MYCPPDLL_API MyExportedClass
{
};



Nun kann man den Header einmal im DLL projekt selbst verwenden (mit MYCPPDLL_EXPORTS definiert). Und in einer anderen Anwendung/Lib/Dll (wodurch das Symbol von der DLL zuverlässig importiert wird)

Achso: zurück zu deiner Frage ;-)

Du kannst natürlich einen shared_ptr mit Interface benutzen, jedoch nicht mit "extern C", du brauchst dann halt eine art "CreateA"-Funktion (welche exportiert sein muss) die natürlich dein echtes A kennt, aber nur ein InterfaceA zurückgibt.
Wie das genau geht: https://stackoverflow.com/questions/13403490/passing-shared-ptrderived-as-shared-ptrbase

Einzige was eben hier noch dazu kommt ist das dll exportieren/importieren
--
class God : public ChuckNorris { };

Dieser Post wurde am 11.10.2018 um 03:28 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: