Domanda

Data una DLL con le seguenti classi :

#define DLLAPI __declspec(...)

class DLLAPI Base
{
    public:
    virtual void B();
};

class Derived : public Base
{
    public:
    virtual void B();
    virtual void D();
};

Sarà il mio "Derivati" classe di essere visibile al di fuori della dll, anche se la "DLLAPI" parola chiave non viene applicata per la definizione della classe (almeno non direttamente)?

È la "D()" la funzione visibile?

Grazie

È stato utile?

Soluzione

classe Derivata non essere esportate dalla DLL.Le classi non si eredita l'esportazione.Aggiungere DLLAPI di troppo.

Nota anche che i membri della classe predefinita di accesso privato, in modo che nessuno dei vostri metodi devono essere accessibili.Tuttavia, vedo di Base::B() che viene esportato nel mio test.Il C++ header nella DLL-utilizzando il codice sarebbe bandiera è l'errore, ma mi chiedo se è cambiato l'intestazione c', se si potesse ingannare esso.

Comunque, se hai fatto creare un'istanza di un ricavata all'interno della DLL (tramite un altro punto di ingresso), un tavolo virtuale deve ancora lavorare, quindi se hai fatto:

Base* b = getTheDerived(); b->B();

devi richiamare Derivati::B().

Altri suggerimenti

Si può scoprire da un comando di Visual Studio shell digitando

link /dump /exports <yourdll>

Se sono esportati, vedere "nomi decorati" per tutte le funzioni.Per vedere che cosa sono in un formato leggibile, copia-incolla di uno e fare

undname <decorated name>

No, Derivata non sarà visibile al di fuori della DLL.Per esportare la classe derivata, si dovrebbe applicare la DLLAPI macro per le classi derivate.

Devi fare entrambe le classi base e classi derivate esportabile,

http://msdn.microsoft.com/en-us/library/81h27t8c.aspx

All base classes of an exportable class must be exportable. If not, a compiler 
warning is generated.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top