C++ 中的 __declspec(dllexport) 和 __declspec(dllimport)

__declspec(dllexport) and __declspec(dllimport) in C++

我经常在Windows上看到__declspec(dllexport) / __declspec(dllimport)说明,在Linux上看到__attribute__((visibility("default")))有功能,但我不知道为什么。你能给我解释一下,为什么我需要对共享库使用这些说明?

Windows-exclusive __declspec(dllexport) 当您需要从 Dll 调用函数(通过导出它)时使用,可以从应用程序访问。

示例 这是一个名为“fun.dll”的 dll :


// Dll.h :

#include <windows.h>

extern "C" {

 __declspec(dllexport) int fun(int a);   // Function "fun" is the function that will be exported

}

// Dll.cpp :

#include "Dll.h"

int fun(int a){
return a + 1;
}


您现在可以从任何应用程序访问“fun.dll”中的“乐趣”:

#include <windows.h>

typedef int (fun)(int a);  // Defining function pointer type

int call_fun(int a){
  int result = 0;

  HMODULE fundll = LoadLibrary("fun.dll");   // Calling into the dll
  
  if(fundll){
    fun* call_fun = (fun*) GetProcAddress(fundll, "fun"); // Getting exported function
     if(call_fun){
       result = call_fun(a);    // Calling the exported fun with function pointer
     }       
  }
return result;
}