Liny_@NotePad

沉迷ACG中

dllimport与dllexport。。

YOYO posted @ 2009年10月16日 06:17 in 【C/C++】 with tags dll , 3828 阅读

之前写过模块化编程的练习,里面定义导出符号的时候使用了形如下文的代码。

  1. #ifdef SYSTEM_EXPORTS
  2. #define SYSTEM_API __declspec(dllexport)
  3. #else
  4. #define SYSTEM_API __declspec(dllimport)
  5. #endif

今天同学问是啥意思。。不明。。于是经过同桌指点 终于大概晓得了。。

上面这段代码通常写在.h文件中,我们编译有导出函数的dll时,就用dllexport,这时我们一般在预处理器中已经输入了SYSTEM_EXPORTS,使SYSTEM_API替换成export,
在exe使用的时候应该是import的,此时我们包含这个.h文件,而exe的预处理器中不会包含SYSTEM_EXPORTS,SYSTEM_API就变成import了。

= = 更详细一点来说,我们写dll的时候 需要声明和定义dllexport的函数/类。
而我们用exe来调用dll的时候,必须包含一个带有上述函数/类的dllimport的声明。如果使用这种写法,就可以使用一个.h文件,在dll的时候做export作用,在exe的时候做import作用了。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter