博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从项目中生成dll文件的快速方法(a fast way to generate dll from the project)
阅读量:6687 次
发布时间:2019-06-25

本文共 1579 字,大约阅读时间需要 5 分钟。

最近学到了一个非常方便的从VisualStudio的project中生成dll的方法,记录如下:

以一个简单的工程作为例子,假设现在我们有一个叫dllDemo的工程,里面有如下两个文件:

dllDemo.h

#include
#include
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"EXPORTSyour_function_name

例如,我们的项目名称叫DllDemo,需要封装到dll文件中的函数叫max,就这么写:

LIBRARY    "dllDemo"EXPORTSMax

然后把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
#include
#include
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文件生成成功并且没有问题。

转载地址:http://uohao.baihongyu.com/

你可能感兴趣的文章
在.NET Core中遭遇循环依赖问题"A circular dependency was detected"
查看>>
3 django系列之Form表单在前端web界面渲染与入库保存
查看>>
Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全
查看>>
linux设备驱动归纳总结(六):1.中断的实现【转】
查看>>
可重入函数与不可重入函数【转】
查看>>
js yield
查看>>
Docker 传奇之 dotCloud
查看>>
迅雷下载精简版
查看>>
ElasticSearch 基础<转载>
查看>>
如何使用SVN协调代源代码,多人同步开发
查看>>
shell脚本练习【转】
查看>>
java集合框架 hashMap 简单使用
查看>>
Web Worker
查看>>
$fn、$extends $fn.extends的用法,jquery的插件开发
查看>>
UDP丢包原因
查看>>
Kafka Consumer 启动测试类
查看>>
CSRF学习笔记之CSRF的攻击与防御以及审计【00x3】
查看>>
mysqldump
查看>>
Python操作MySQL数据库9个实用实例
查看>>
Nuget4.0 bug一粒
查看>>