c ++ - forbindelse mellem dllimport og dllexport

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nogle spørgsmål vedrørende dllexport, dllimport i C ++ i Windows. Lad os antage, at jeg har nogle module.cpp og module.h, hvilke eksportfunktioner der bruger dllexport. Lad os antage at jeg også har moduleWrapper.cpp og moduleWrapper.h, hvilken importfunktion fra module.cpp ved hjælp af dllimport.


Kan nogen venligst forklare, hvorfor kan jeg savne at skrive #include module.h i min moduleWrapper.cpp og moduleWrapper.h. Jeg kan ikke forstå, hvordan linkeren kender adresser af funktioner fra module.cpp, på forhånd tak for enhver forklaring

Bedste reference


Fra hvad jeg forstår, har du noget i dette modul.h:


\_\_declspec(dllexport) void f();


Og så har du en lignende erklæring i dit modulWrapper.cpp:


\_\_declspec(dllimport) void f();


Det tæller som en funktionserklæring, så du fjerner ethvert behov for at inkludere modul.h. Sådan gøres det almindeligvis ved at sætte følgende kode i din inklusiv fil:


#ifdef PROJECTNAME\_EXPORTS // (the default macro in Visual Studio)
#define PROJECTAPI \_\_declspec(dllexport)
#else
#define PROJECTAPI \_\_declspec(dllimport)
#endif


Og så erklærer du din funktion i headerfilen som denne:


PROJECTAPI void f();


På den måde vil den oversætte til dllexport, når du kompilerer din DLL, og dllimport i filer, der ikke er en del af din DLL, og som tilfældigvis bruger overskriften.