也可以在空项目中添加这三个文件:lib.h、lib.cpp和lib.def。同样build一下就可以得到一个dll文件和一个lib文件,这是C++方式,前面一种是C的方式
这个dll实现了一个add函数。下面贴出上述六个文件的代码。
#ifndef LIB_H #define LIB_H int __declspec(dllexport)add(int x, int y); #endiflib.c文件的内容如下:
#include "lib.h" int add(int x, int y) { return x + y; }lib.def的内容如下:
LIBRARY dTest EXPORTS add @ 1要测试生成的这个dll,可以新建一个空的控制台应用程序,然后其main.c如下(注意这是C方式,因此main.c而不是main.cpp):另外,采用这种静态调用的方式需要将生成的dll文件和lib文件复制到main.c相同目录下。
#include <stdio.h> #pragma comment(lib,"dTest.lib") int __declspec(dllimport) add(int x,int y); void main() { int a=add(2,6); printf("%d\n",a); }
#ifndef LIB_H #define LIB_H extern "C" int __declspec(dllexport)add(int x, int y); #endif注意与C方式的区别,这里有extern "C"
lib.cpp文件内容如下:
#include "lib.h" int add(int x, int y) { return x + y; }.c文件和.cpp文件是函数的具体实现,与dll的创建过程没什么关系。
lib.def文件内容:
LIBRARY dllTest EXPORTS add @ 1与C方式的没有什么区别
#include <stdio.h> #pragma comment(lib,"dllTest.lib") extern "C" int __declspec(dllimport) add(int x,int y); void main() { int a=add(2,6); printf("%d\n",a); }与C方式的不同也就在于有没有extern "C" 。
总结一下在做dll的过程中最重要的是要搞清楚谁对应谁,只要是在c++里面调用到C的函数就必须加上extern "C" 虽然没有尝试过用C++来测试C的dll,但想必也是这样,有兴趣的可以一试。
dll其实有很多类型的,我只是去研究了最简单的dll的实现方式,其他类型的dll我遇到的都忽略了,下面给出几个我在查找资料过程中遇到的感觉比较好的资料,想研究dll的可以去参考参考。