vs2013 dll(动态链接库) 文件的创建和引用

  

vs2013
dll 文件的创建和引用

本人小白,大牛勿喷,内容不深刻,仅仅是关于dll的创建个引用,例子也很简单,只为了说明一些不太容易看清而被忽视导致错误的问题.

   
 
前几天做了个加密算法的封装dll,找了好多教程,发现其实很简单的问题被说的有点不那么容易看懂,这里我就用自己最简单的语言说明这个问题。

建立

   
 
首先,我们打开vs2013,依此点击文件-->新建-->项目-->win32控制台应用程序,起名myDll,确定,下一步,应用程序类型选择dll,默认点击完成(空项目和导出符号我们不选择),个人理解dll文件的书写比较类似于C++中的头文件,从左侧的解决方案中可以看见源文件中包括dllmain.cpp
myDll.cpp 和stdafx.cpp三项,这里的dllmain .cpp
类似用C中的main函数,但是我的们的代码并不是在这个dllmain函数,他相当于一个入口和出口,当函数执行时首先进入这个dllmain函数中然后,执行完其他函数后再今天这个dllmain函数,我们需要自己定义的函数应该写在myDll.cpp中,如果dll中含有其他的头文件的话,需要在stdafx.h中进行声明。我这里写一个很简单的加和函数Add(int
x ,int y);

?





1

2

3

4

5

6

7

8

// myDll.cpp : 定义 DLL 应用程序的导出函数。 

// 

  

#include "stdafx.h" 

_declspec (dllexport) int
Add(int
x, int
y) 

    return
(x+y); 

写完代码后,我们要查看这个dll是不是正确,在调试的左边有一个生成,点击生成,选择第一个生成解决方案,如果代码正确后就回显示生成成功,然后查看文件的地址中的debug你会发现生成了myDll.dll和myDll.lib,则说明我们dll是成功的。

调用

现在我们看看怎么调用写好的dll

同样我们需要写一个简单的测试函数,VS中文件--》新建--》项目--》win32控制台应用程序,起名为test_myDll确定,下一步,控制台应用程序,选择空项目。完成,这里我们用一个c语言程序进行调用,点击源文件新建一个cpp代码如下

?





1

2

3

4

5

6

7

8

9

#include <stdio.h> 

#pragma comment(lib, "myDll.lib")//调用dll文件时候必须用到的 

int Add(int
x, int
y);          //对刚才写好的Add函数进行声明 

//主函数 

int main() 

    printf("%d\n",Add(4,5)); 

    return
0; 

写好代码后选择调试左边的生成,生成解决方案,输出框中会提示无法打开myDll.lib,这是因为我们没有把写好Dll文件拷贝到这个程序的debug中,就会出现路径不明。这样我们在吧myDll拷贝到测试函数的debug中,拷贝完成后,再次生成解决方案,这样依然无法打开myDll.lib,这是因为我们拷贝了但是没有声明,右键左边生成方案下面的test_myDll,点击最下面的属性,选择vc++目录,找出你的测试函数的debug目录,拷贝到库函数的最前面,E:\code\VS\dll\test_myDll\Debug;不过记着要带分好,。完成后再次生成
解决方案,现在就会成功,然后选择调试,点击开始执行(不调试)就会出现我们Add(4,5)的结果 9 。

这就是dll的建立和调用的简单过程,希望对您有帮助,如果发现那里有问题,请您指正,感激不尽!!!

 

时间: 2024-10-04 19:12:04

vs2013 dll(动态链接库) 文件的创建和引用的相关文章

【转】VS2013动态库文件的创建及其使用详解

一.VS2013动态库文件的创建 1.新建项目,win32,win32项目,输入项目名称,例如MakeDll. 2.”确定“——”下一步“,选择”DLL“选项,再点”完成“: 3.菜单栏选择”项目“——>”添加新项“,来创建头文件MakeDll.h. 在MakeDll.h中输入以下例子代码: 1 #ifdef DLL_API//如果已经定义就什么都不做 2 //nothing to do 3 #else //否则定义DLL_API 4 #define DLL_API __declspec(dll

.h头文件、 .lib库文件、 .dll动态链接库文件之间的关系(转)

h头文件作用:声明函数接口 dll动态链接库作用:含有函数的可执行代码 lib库有两种: (1)静态链接库(Static Libary,以下简称“静态库”) (2)动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) 两者的区别: 实质是不一样的东西. 静态库本身就包含了实际执行代码.符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息. 如:当我们在自己的程序中引用了一个h头

[学习记录]使用C#语言调用.dll(动态链接库)文件

不可全信 感谢各位博客教会了我很多,我也要写出来参与社区建设. 嘛不一定完全正确,想要可靠性比较高的同志建议买书,书中出处啥的比较详细,可靠性比较高. --------------------- 1.基本步骤 1.1 向项目中导入dll文件 1.2 阅读dll文件的使用手册 [ 和头文件(.H) ] 1.3 编写导入dll文件中方法的代码 1.4 编写读取dll中对应数据的代码(可能略) 1.5 写方法调用dll中方法并加以判断调用是否成功 1.6 在相关位置调用使用自己定义的调用方法 2.基本

.h头文件 .lib库文件 .dll动态链接库文件关系

.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有. .h .lib .dll三者的关系是: H文件作用是:声明函数接口 DLL文件作用是: 函数可执行代码 当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用:

头文件的创建和引用

一.代码 main.c文件 #include <stdio.h> #include "myH.h" void main(){ printf("%d",getInt()); } myH.h文件 #ifndef _SOMEFILE_H_ //如果_SOMEFILE_H_没有被定义 #define _SOMEFILE_H_ //定义_SOMEFILE_H_ int getInt();//暴露函数 #endif getInt.c文件 #include "

在VS2010中创建并引用dll(C#)

一般情况下,如果在新建或添加时选择“windows应用程序”或“控制台应用程序”时,‎结果都会被编译成exe,而选择“类库”时就会被编译成dll.也可以在项目属性中更改其输出类型,如下图:         下面上一个创建dll并引用的实例.         1.新建一个项目,选择类库,命名DllTest.然后写一个类,里面包含一些方法什么的,为了突出主题,作为例子,我就写了一个简单的类,如下: using System; using System.Collections.Generic; usi

创建dll动态链接库,并使用java调用

参考文章:http://www.cnblogs.com/matthew-2013/p/3480296.html http://blog.csdn.net/g710710/article/details/7255744 首先探讨何为动态链接库,按照百毒百科的解释: [动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式.这些库函数的扩展名是 ".dll"

VS2013环境生成和调用DLL动态链接库

创建动态库方法: 创建动态库是生成 .dll .lib 两个个文件 文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:DLL  附加选项:空项目 建立源文件dllgenerator.cpp(不需要主函数,只写你需要动态调用的函数) // 整数加法和乘法 int Add(int a, int b){ return a + b; } int Mul(int c, int d){ return c * d; } 建立头文dllgen

Linux动态链接库.so文件的创建与使用

1. 介绍         使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个"程序函数库"简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用.程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级.  程序函数库可分为3种类型:静态函数库(static libraries).共享函数库(shared libraries).动态加载函数库(dynamically loaded libraries): 1.静态函数