首页 > 其他分享 >visual studio 生成dll文件以及修改输出dll文件名称操作

visual studio 生成dll文件以及修改输出dll文件名称操作

时间:2023-08-29 16:24:45浏览次数:47  
标签:文件 源代码 lib dll visual studio 生成 pdb

visual studio 生成dll文件以及修改dll文件名

Windows系统下Visual Studio可以通过.def文件创建dll。

一、准备测试代码

1.确定需要导出的函数,test.cpp文件中定义如下

void fun1()
{
return;
}
void fun2()
{
return;
}
int main()
{
return 0;
}

2. 添加.def文件,一般添加到源文件下面。

 在代码栏下面有一个“模块定义文件”,即我们的.def文件

 3.编写test.def文件

LIBRARY "test"

EXPORTS
fun1
fun2

文件添加完成,下一步即可设置一些导出规则。

 

二、设置导出dll属性

4.在我们的项目上点击右键,选择“属性”。修改一下配置

 平台是64位还是32位要和我们的代码版本保持一致。代码版本查看如下:

 

 如果目标文件名不一致可能会报以下问题。导致输出的文件dll文件名不是自己设置的。

三、生成dll文件

5.设置完之后,点击项目右键,生成或者重新生成,即可生成我们的dll文件。

 

 

.lib .dll .pdb 的简单介绍
.lib .dll文件都是程序可直接引用的文件,前者就是所谓的库文件,后者是动态链接库(Dynamic Link Library)也是一个库文件。而.pdb则可以理解为符号表文件(debug调试用)。

dll文件使用方式
我们的dll文件可以直接使用,调用windows的api LoadLibrary来加载dll,根据头文件调用GetProcAddress 加载dll中的函数,最后使用FreeLibrary释放。

lib文件使用方式
对于程序引用.lib文件一般有两种方式:

1、动态链接 (原理)
这种方式的基本原理是lib文件中包扩了某一段程序(函数)的入口或者说是地址,而他真正的机器码是在dll文件中,

IDE链接的时候将.lib文件(程序地址)链接到源代码中,程序运行时到相应位置(环境变量path,当前目录等)寻找dll文件并执行其中的机器码。

所以这种引用方式一般需要的文件一般有三个:.h,.lib,.dll,生成的源程序也会比较小,因为他只保存了函数地址,但是这种方式总是会出现找不到xxx.dll这种问题。

如果这时候我们还有dll的源代码,并且希望IED可以调试源码,那么就需要.pdb文件了,pdb文件中保存了dll的符号表,所谓符号表可以理解为机器码(这里是dll中的)中插入的key与源代码文件的映射,这样只要指定源码存放的路径,IDE就会自动去找源码。

需要注意的是,pdb文件和dll文件是配套的,也就是说一旦dll文件有改动(比如说重新生成)pdb文件就必须做相应改变。

pdb文件也比较大,程序运行时也会因为要完成映射而比较慢,这也是release版与debug的区别。

2、静态链接:
这种方式只需要lib文件,当然头文件也是需要的。这种方式时候lib文件中有两个部分,可以将文件后缀改为rar解压可以看到。第一部分就是和第一种方式中的key,第二部分是.obj文件存储在obj文件夹下,他相当与dll中的机器码,只不过这个机器码是在链接的时候放入程序的,而不是在程序运行时拿进来的。如果这时候我们也有源代码,并且希望IED可以调试源码,这很容易因为如果lib文件生成的时候模式是NDEBUG(好像不是也可以),obj文件夹下是有一个xx.pdb这个pdb文件中的东西会被IED放入程序的pdb中,所以直接指定源代码位置使用就可以了。

 

标签:文件,源代码,lib,dll,visual,studio,生成,pdb
From: https://www.cnblogs.com/workformyselfandworld/p/17665154.html

相关文章

  • Android studio 连接安卓设备
    下载连接工具https://developer.android.com/studio/releases/platform-tools?hl=zh-cn加到环境变量Windows或Linux、Mac使用命令adbconnect192.168.**.**#需要连接的安卓设备IP如果出现cannotconnectto192.168..:5555:由于目标计算机积极拒绝,无法连接。(10061)则......
  • Trados Studio | 项目记忆库 vs 主记忆库6
    一些使用TradosStudio的译员会为自己翻译的每个语言对都设置一个记忆库(TM),将其用于相关语言对的所有项目。另一些人会为不同的项目使用不同的TM,例如,为不同的客户、领域或翻译类型应用不同的TM。但这些仍然是TradosStudio中的主TM;而不是项目TM。那么什么是项目TM?为什么......
  • Trados Studio | 项目记忆库 vs 主记忆库5
    一些使用TradosStudio的译员会为自己翻译的每个语言对都设置一个记忆库(TM),将其用于相关语言对的所有项目。另一些人会为不同的项目使用不同的TM,例如,为不同的客户、领域或翻译类型应用不同的TM。但这些仍然是TradosStudio中的主TM;而不是项目TM。那么什么是项目TM?为什么......
  • Trados Studio | 项目记忆库 vs 主记忆库7
    一些使用TradosStudio的译员会为自己翻译的每个语言对都设置一个记忆库(TM),将其用于相关语言对的所有项目。另一些人会为不同的项目使用不同的TM,例如,为不同的客户、领域或翻译类型应用不同的TM。但这些仍然是TradosStudio中的主TM;而不是项目TM。那么什么是项目TM?为什么......
  • Trados Studio | 项目记忆库 vs 主记忆库2
    一些使用TradosStudio的译员会为自己翻译的每个语言对都设置一个记忆库(TM),将其用于相关语言对的所有项目。另一些人会为不同的项目使用不同的TM,例如,为不同的客户、领域或翻译类型应用不同的TM。但这些仍然是TradosStudio中的主TM;而不是项目TM。那么什么是项目TM?为什么......
  • Trados Studio | 项目记忆库 vs 主记忆库
    title:"TradosStudio|项目记忆库vs主记忆库"date:"2023-07-09T17:20:24+08:00"tags:[""]draft:false一些使用TradosStudio的译员会为自己翻译的每个语言对都设置一个记忆库(TM),将其用于相关语言对的所有项目。另一些人会为不同的项目使用不同的TM,例如,为不同的客......
  • C++如何写一个简单的DLL文件
     这个东西其实挺简单的,刚开始写的时候,是在VC的编译器上,按照前人的步骤,老失败,折腾我一天了,结果,我换了个编译器,在vs08的平台上,就成功了,好了,不多少了,分享一下:首先建立一个MyDll的win32项目中建立一个DLL类型的工程,然后创建一个CPP文件,取名MyDll,内容如下:extern"C"__declspec(dllex......
  • webpack生产环境优化:dll
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:dlldll动态链接库目的:单独的将多个指定的第三方库打包成一个chunk。意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现......
  • webpack生产环境优化:dll
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:dlldll动态链接库目的:单独的将多个指定的第三方库打包成一个chunk。意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现......
  • Galaxy Studio星河工作室于8月26日正式使用Canva可画网页版对室徽进行重绘!还开放了名
    GalaxyStudio星河工作室于8月26日正式使用Canva可画网页版对室徽进行重绘!还开放了名片模板?据了解,GalaxyStudio星河工作室室长于8月26日对使用Canva可画网页版室徽正式重绘!新室徽到底怎么样呢?让大家都来看看吧!怎么样?不错吧!对了!还有一个名片模板,想要使用的成员可以找QQ2789617......