首页 > 其他分享 >dllimport 和 dllexport

dllimport 和 dllexport

时间:2023-11-08 16:24:00浏览次数:36  
标签:__ dllimport 接口 PROJECT dllexport define

Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如,

#define DllExport   __declspec( dllexport )

class DllExport C {
   int i;
   virtual int func( void ) { return 1; }
};

  

注意,禁止对可导出类的成员显式使用 dllimport 和 dllexport 特性。

我们一般情况下会使用预定义宏控制 dll 接口的导入导出,比如,

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#ifdef __PROJECT_OS_WIN32__
#define PROJECT_API __stdcall
#define DLLIMPORT_C extern __declspec(dllimport)
#define DLLEXPORT_C __declspec(dllexport)
#else
#define PROJECT_API
#define DLLIMPORT_C
#define DLLEXPORT_C __attribute__((visibility("default")))
#endif // __PROJECT_OS_WIN32__

#ifdef __PROJECT_SOURCE__
#define PROJECT_EXPORT DLLEXPORT_C
#else
#define PROJECT_EXPORT DLLIMPORT_C
#endif // __PROJECT_SOURCE__

PROJECT_EXPORT int PROJECT_API project_init(struct xxx**ctx, int x);

  

这样,我们只要在 Dll 的工程里添加 __PROJECT_OS_WIN32__ 和 __PROJECT_SOURCE__ 预定义宏就可以导出 project_init 接口

同样,我们在使用的时候只要在项目中添加 __PROJECT_OS_WIN32__  即可导入 project_init 接口,当然,项目中要包含相关接口的头文件

参考:

拓展:

上述第二个链接中提到了 .def 文件,添加该文件也是为了暴露接口,后续可以研究研究

标签:__,dllimport,接口,PROJECT,dllexport,define
From: https://www.cnblogs.com/strive-sun/p/17817656.html

相关文章

  • c#的dllimport使用方法详解
    关于“C#的DllImport使用方法详解”的攻略如下:简介DllImport是C#中一个用于调用非托管代码的方法。它可以让我们在C#代码中调用一些使用一些C++或Win32API等编写的代码。使用方法DllImport的用法非常简单,我们只需要使用指定DllImport特性来声明一个需要调用的函数,然后在代码......
  • WCF无法加载DLLImporte的dll(focas)
    WCF无法加载DLLImported的dll尝试将外部DLL放到路径C:\Windows\SysWOW64\inetsrv  DllImport1.托管代码与非托管代码在学习DllImport方法之前,先了解下托管代码和非托管代码的概念。我们编写的C#代码(不只是C#,也包括.net平台上的其他语言,如VB,J#等),首先经过编译器把代码编译......
  • __declspec(dllimport) 和 __declspec(dllexport)的使用详解、以及 XX_API 的含义
    1.C++代码里调用别人的库、或者写库给别人用、大概有如下的方法(只讨论windows系统的情况):----a)提供头文件h、静态库lib --》静态链接----b)提供头文件h、 ......