Avatar billede svinth Nybegynder
23. august 2001 - 09:35 Der er 9 kommentarer og
1 løsning

#define _CRTIMP __declspec(dllimport)

Hej C/C++ gruppe.

Hvis man definerer:

#define _CRTIMP __declspec(dllimport)

istedet for blot

#define _CRTIMP

, hvad er det egentlig man fortæller compileren?
Eksempelvis står der:

_CRTIMP time_t __cdecl time(time_t *);

i time.h (MSVC++).
Vil det sige at time functionen skal importeres fra en dll?
Eller hvordan skal det forståes?

M.v.h. Svante
Avatar billede wisen Nybegynder
23. august 2001 - 09:55 #1
Fra MSDN :

When the compiler sees a function declared as __declspec(dllimport), it generates references to the function via a decorated name. The name decoration used follows the pattern __imp__<function_name>. For example, the _commit function is referenced as __imp___commit.

Efter hvad jeg kan se er det for at undgå en eller anden linkererror ?!?

Se MSDN Q112297; Finder lige et link...
Avatar billede wisen Nybegynder
23. august 2001 - 09:58 #2
Avatar billede wisen Nybegynder
23. august 2001 - 10:05 #3
The dllexport and dllimport Attributes

The dllexport and dllimport storage-class modifiers export and import functions, data, and objects to and from a DLL. These modifiers, or attributes, explicitly define the DLL&#8217;s interface to its client, which can be the executable file or another DLL. Declaring functions as dllexport eliminates the need for a module-definition (.DEF) file, at least with respect to the specification of exported functions. Note that dllexport replaces the __export keyword.

The declaration of dllexport and dllimport uses extended attribute syntax:

__declspec( dllexport ) void func();

Alternatively, to make your code more readable, you can use macro definitions:

#define DllImport  __declspec( dllimport )
#define DllExport  __declspec( dllexport )

DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;

Avatar billede wisen Nybegynder
23. august 2001 - 10:10 #4
Så ja, _declspec(dllimport) fortæller at den skal linke til en ekstern funktion i en anden DLL undenfor din EXE fil...
Avatar billede svinth Nybegynder
23. august 2001 - 10:25 #5
Hej.

Det der undrer mig er at man ikke skal angive fra hvilken dll man henter funktionen!?
Og hvad så med dlleksport, putter den funktioner i en ny dll fil?

M.v.h. Svante
Avatar billede wisen Nybegynder
23. august 2001 - 10:28 #6
Ja, dlleksport (som er en afløser til __EXPORT), fortæller at det er en funktion der skal eksporteres...
Avatar billede svinth Nybegynder
23. august 2001 - 10:30 #7
Hej.

Men her behøver man heller ikke at angive til hvilken dll med navn?

M.v.h. Svante
Avatar billede wisen Nybegynder
23. august 2001 - 10:36 #8
Nej, men det må linkeren jo finde ud af; eller vill den jo brokke sig :) Det er fordi funktionen ligger i C runtime biblioteket, som den altdi linker med...

Avatar billede svinth Nybegynder
23. august 2001 - 10:42 #9
Tak! :)
Avatar billede wisen Nybegynder
23. august 2001 - 10:50 #10
np; takker for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB