Domanda

Sto solo cercando una spiegazione semplice e concisa della differenza tra questi due.MSDN non entra molto nei dettagli qui.

È stato utile?

Soluzione

  • __declspec(dllexport) dice al linker che vuoi che questo oggetto sia reso disponibile per l'importazione di altre DLL.Viene utilizzato durante la creazione di una DLL a cui altri possono collegarsi.

  • __declspec(dllimport) importa l'implementazione da una DLL in modo che l'applicazione possa utilizzarla.

Sono solo uno sviluppatore C/C++ alle prime armi, quindi forse qualcuno ha una spiegazione migliore di me.

Altri suggerimenti

__declspec( dllexport ) - La classe o la funzione così contrassegnata verrà esportata dalla DLL in cui è incorporata.Se stai creando una DLL e desideri un'API, dovrai utilizzare questo o un file .DEF separato che definisce le esportazioni (MSDN).Ciò è utile perché mantiene la definizione in un unico posto, ma il file .DEF fornisce più opzioni.

__declspec( dllimport ) - La classe o funzione così taggata verrà importata da una DLL.In realtà questo non è necessario: è necessaria una libreria di importazione Comunque per rendere felice il linker.Ma se correttamente contrassegnato con dllimport, il compilatore e il linker dispongono di informazioni sufficienti per ottimizzare la chiamata;senza di esso, si ottiene un normale collegamento statico a una funzione stub nella libreria di importazione, che aggiunge un riferimento indiretto non necessario. ONT1 ONT2

Due diversi casi d'uso:

1) Stai definendo un'implementazione di classe all'interno di una DLL.Vuoi che un altro programma utilizzi la classe.Qui usi dllexport mentre stai creando una classe che desideri che la dll esponga.

2) Stai utilizzando una funzione fornita da una dll.Includi un'intestazione fornita con la dll.Qui l'intestazione utilizza dllimport per inserire l'implementazione che deve essere utilizzata dal programma corrente.

Spesso in entrambi i casi viene utilizzato lo stesso file di intestazione e viene definita una macro.La configurazione di build definisce che la macro venga importata o esportata a seconda di ciò di cui ha bisogno.

Dllexport viene utilizzato per contrassegnare una funzione come esportata.Implementi la funzione nella tua DLL e la esporti in modo che diventi disponibile a chiunque utilizzi la tua DLL.

Dllimport è l'opposto:contrassegna una funzione come importata da una DLL.In questo caso dichiari solo la firma della funzione e colleghi il tuo codice alla libreria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top