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

发布于 2025-01-23 17:22:40 字数 202 浏览 0 评论 0原文

我经常看到__ extspec(dllexport)/__ extspec(dllimport)在Windows上指令,__属性__((vistibility(vistibility(“ default”)))))) Linux具有功能,但我不知道为什么。您能否向我解释,为什么我需要为共享库使用这些说明?

I often see __declspec(dllexport) / __declspec(dllimport) instructions on Windows, and __attribute__((visibility("default"))) on Linux with functions, but I don't know why. Could you explain to me, why do I need to use theses instructions for shared libraries?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

菊凝晚露 2025-01-30 17:22:40

当您需要从DLL调用函数(通过导出),可以从应用程序访问Windows-Exclusive __ extspec(dllexport)

示例这是一个称为“ 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”的“ fun”:

#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;
}

The Windows-exclusive __declspec(dllexport) is used when you need to call a function from a Dll (by exporting it) , that can be accessed from an application.

Example This is a dll called "fun.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;
}


You can now access the "fun" from "fun.dll" from any application :

#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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文