What is dllspec(dllimport) and dllspec(dllexport) means

后端 未结 3 1893
庸人自扰
庸人自扰 2021-02-06 18:48

After googling, i came to know that Dllimport makes the function available for other modules,

is it mandatory to declare function with extern \"c\" identifier?

A

3条回答
  •  误落风尘
    2021-02-06 19:50

    No -- dllexport means you're exporting it from the DLL (or from an executable) so that other modules (DLLs or executables) can use that function.

    dllimport is used to declare a function that's implemented in a DLL (or, again, executable).

    So, in a typical case, you'll have something like:

    #ifdef BUILDDLL
    #define DLL declspec(dllexport)
    #else
    #define DLL declspec(dllimport)
    #endif
    

    Then each public function the DLL will be marked as DLL:

    DLL int dosomething(int);
    

    Then, when you're building the DLL, you'll define BUILDDLL, to have all those functions marked as dllexport. Otherwise, you'll include the same header in client code that needs to use the function(s). It won't define BUILDDLL, so they'll all be marked as dllimport instead, so when it comes to link time, it'll create a link to that DLL instead of trying to satisfy those functions from someplace like the standard library.

提交回复
热议问题