从项目中生成dll文件的快速方法(a fast way to generate dll from the project)
最近学到了一个非常方便的从VisualStudio的project中生成dll的方法,记录如下:
以一个简单的工程作为例子,假设现在我们有一个叫dllDemo的工程,里面有如下两个文件:
dllDemo.h
#include<stdlib.h> #include<stdio.h> int main (); int Max(int x,int y);
dllDemo.cpp
#include"dllDemo.h" int main () { int max_value=Max(100,7); printf("%d\n",max_value); return 0; } int Max(int x,int y) { return x>y?x:y; }
我用的是vs2005,其他的也大同小异,目录结构如下:
如图,这是一个非常简单工程,里面也没什么东西,只有一个main函数和一个做示范的max函数。
现在,我们的目的就是把这个max函数从这个项目里面提取出来,封装成一个dll文件,让其他的程序可以调用通过dll文件调用这个函数。
第一步
首先,我们用记事本创建一个.def文件,文件名的话随便起一个就行,比如叫:GenDll.def,然后按照以下格式填写内容:
LIBRARY "your_project_name" EXPORTS your_function_name
例如,我们的项目名称叫DllDemo,需要封装到dll文件中的函数叫max,就这么写:
LIBRARY "dllDemo" EXPORTS Max
然后把GenDll.def复制到DllDemo\DllDemo目录下,并且在项目中把这个文件添加到源文件夹里面。其实直接右键添加新建项,然后新添加一个def文件应该也可以,不过我的vs2005每次这么做的时候都会报错,所以,为了保险起见,还是按照上述的方法做。此时,我们的目录结构如下:
第二步
这一步我们需要对项目的属性进行一些修改,
1.右键项目-属性-配置属性-常规-配置类型-动态库dll
2.右键项目-属性-链接器-常规-输出文件-把文件名称后缀改为dll
3.右键项目-属性-链接器-输入-模块定义文件-输入def文件名称
4.右键项目-属性-链接器-高级-导入库-输入$(TargetDir)$(TargetName).lib
OK,做到这一步基本就完成了,配置属性结束了。
第三步
重新生成一遍解决方案,然后在DllDemo\debug下就会发现多了一个DllDemo.dll文件,这个就是我们需要的dll文件。
第四步
上面三个步骤生成了我们想要的dll文件,但是我们还没有测试这个dll是否可用。有的时候,很可能由于疏忽,导致dll文件里面的函数有问题。因此,我们还要写一个test程序,来测试性能。
方法也很简单,直接在当前的解决方案上右键-新建项目,然后随便起个名,我的是DllTest,目录结构如下:
DllTest.cpp内容如下:
#include<stdlib.h> #include<stdio.h> #include<Windows.h> int Max(int x,int y); int main () { int max_value=Max(300,127); printf("%d\n",max_value); system("pause"); return 0; }
然后把项目依赖性里面DllTest的依赖项改为DllDemo,然后把DllTest设置为启动项,接下来启动调试,
如果编译没有问题,且控制台输出如下内容:
恭喜你,你的dll文件生成成功并且没有问题。