c ++ - Er \_\_declspec (dllexport) nødvendig i cpp filer

Indlæg af Hanne Mølgaard Plasc

Problem



Sandsynligvis et simpelt spørgsmål, men jeg har kun Linux til at teste denne kode på, hvor \_\_declspec (dllexport) ikke er nødvendig. I den nuværende kode er \_\_declspec (dllexport) foran alle filer i .h-filen, men lige foran 50\% af funktionerne i cpp-filen, så jeg undrer mig over, om de virkelig er nødvendige i cpp-filen overhovedet?

Bedste reference


Nej, det er kun nødvendigt i overskriften.


Her er et link med mere info. [3]


Udvidende på hvad Vinay sagde, har jeg ofte set en makro defineret


#if defined(MODULENAME\_IMPORT)
#define EXPORTED \_\_declspec(dllimport)
#elif defined(MODULENAME\_EXPORT)
#define EXPORTED \_\_declspec(dllexport)
#endif


Derefter gør du i dit overskrift


void EXPORTED foo();


Indstil definerer i overensstemmelse hermed i projektindstillingerne for projektet, der laver import/eksport.

Andre referencer 1


Nej, det kræves ikke i cpp-filen. Kun i erklæring er det påkrævet.


For eksempel, hvis jeg har en klasse CMyClass. Hvis jeg vil eksportere dette så vil .h have


.h Server kode


\_\_declspec (dllexport) CMyClass
{
};


I klientkoden, dvs. hvilken bruger denne klasse, skal du fremsende erklære klassen som


Klientkode


\_\_declspec (dllimport) CMyClass;


//Kode til brug for klassen

Andre referencer 2


Du kan bruge i .cpp-fil også, når du har templated kode og du instantiating i .cpp-fil, så skal du eksportere definitionen, når den er instanseret. Men selv i dette tilfælde har jeg set det at gøre i .h virker også. På Windows kan du bruge dumpbin.exe/export * .dll for at se, hvilke signaturer der eksporteres, der er også et lignende værktøj i Linux. Dette giver dig en ide om, hvordan signaturen eksporteres.