Liny_@NotePad

沉迷ACG中

dllimport与dllexport。。

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

  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作用了。

【20090915】C++培训日记-模块化编程

今天学习了lib和dll隐式链接、显式链接 = =。

下面是demo。。使用时请注意VS中包含文件目录和附加库目录的设定,或直接将对应的h、lib、dll拷贝到使用工程的目录下。