_declspec(dllexport)和_declspec(dllimport)

简介: _declspec(dllexport)和_declspec(dllimport)

含义:

__declspec(dllexport)导出到dll


__declspec(dllimport)从dll导入


解决的问题:

 考虑下面的需求,使用一个方法,一个是提供者,一个是使用者,二者之间的接口是头文件。头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。


举例:

#ifndef _INC_MYSOCKETCLIENT_H_
#define _INC_MYSOCKETCLIENT_H_
#define Import_SSS
#ifdef Import_SSS
#define API _declspec(dllexport)
#else 
#define API _declspec(dllimport)
#endif
#ifdef _cplusplus//extern"C" 来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。
extern "C" {
#endif // _cplusplus
  API//导出函数,让外界调用。
  int socketClient_Init(void **handle);
  API
  int socketClient_Send(void *handle, unsigned char *buf, int buflen);
  API
  int socketClient_Recv(void *handle, unsigned char *buf, int *buflen);
  API
  int socketClient_Destory(void *handle);
#ifdef _cplusplus
}
#endif // _cplusplus
#endif //_INC_MYSOCKETCLIENT_H_


存在Import_SSS的宏定义是提供者,不包含时,作为使用者。在Window时,采用LoadLibrary的方式加载dll时,二者都可以。

目录
相关文章
__declspec(dllexport) 和 __declspec(dllimport)
__declspec(dllexport) 和 __declspec(dllimport)
111 0
|
编译器 程序员 API
函数调用约定:__stdcall、__cdecl和__fastcall介绍
函数调用约定:__stdcall、__cdecl和__fastcall介绍
161 0
|
C#
都是用 DllImport?有没有考虑过自己写一个 extern 方法?
原文 都是用 DllImport?有没有考虑过自己写一个 extern 方法? 你做 .NET 开发的时候,一定用过 DllImport 这个特性吧,这货是用于 P/Invoke (Platform Invoke, 平台调用) 的。
945 0
|
移动开发 编译器 C语言