简单实现c++动态链接库

来源:互联网 发布:java项目案例分析 编辑:程序博客网 时间:2024/06/05 23:17

软件:vs2013 功能:简单实现c++动态链接库过程

先建一个主文件夹,里面可以放两个工程文件夹,然后存放各自的工程文件,看一下结构


在主工程文件中新建一个空项目添加main.cpp


此时main.cpp中添加代码:

#include<iostream>  
using namespace std;
void main()
{
cout << "test" << endl;
system("pause");
}

编译通过一切正常,在解决方案上右键->添加->新建项目,选择win32项目->下一步->选择DLL->完成




空项目可点可不点,点的话解决方案中有两个工程文件main和dll,dll,中有一些自带的文件可以不用管。在dll工程中添加testdll.h和test.cpp,

.h文件中放入代码:

#ifndef DllTest_H_  
#define DllTest_H_  
#ifdef MYLIBDLL  
#define MYLIBDLL extern "C" _declspec(dllimport)   
#else  
#define MYLIBDLL extern "C" _declspec(dllexport)   
#endif  
MYLIBDLL int Add(int plus1, int plus2);   //dll中的添加的函数声明

//You can also write like this:  
//extern "C" {  
//_declspec(dllexport) int Add(int plus1, int plus2);  
//};  
#endif  

前面的宏定义是dll相对于主工程文件调用时的输入和dll文件调用时的输出,

在.cpp文件中放入以下代码:

#include "stdafx.h"  
#include "dlltest.h"  
#include <iostream>  
using namespace std;
MYLIBDLL int Add(int plus1, int plus2)
{
int add_result = plus1 + plus2;
return add_result;
}

vc6里面必须加宏定义MYLIBDLL这里试可加可不加

点击生成解决方案则在main文件夹下debug中生成


现在在main.cpp中就可以调用这两个文件了

先在工程中添加testdll.h的头文件

1 ,可以把dll文件下的头文件复制到main下project中。(该功能的话要重新复制不推荐)。

2,也可以项目->属性->c/c++->常规->附加包含目录->填写路径,可以填写绝对路径(文件夹移动程序出错,不推荐)

也可以填写相对路径(推荐,只要不动文件夹里面的东西程序正常)。

填写路径时默认当前路径为主函数工程下的目录中:"..\..\dll"

       

而dll和lib文件在Debug中则需返回上一层进入Debug中

如图:

在main.cpp中添加代码:

#include"testdll.h"  
#include<iostream>  
using namespace std;
#pragma comment(lib, "..\\Debug\\Win32Project1.lib")
void main()
{
int a, b;
cout << "please input two number:" << endl;
cin >> a >> b;
cout << a << "+" << b << "=" << Add(a, b) << endl;
system("pause");
}

调用lib文件时

注意在程序中写相对路径需写为..\\Debug\\Win32Project1.lib写为..\Debug\Win32Project1.libvs不认识会出错

也可以在属性->链接->输入->附加依赖项中输入上面的路径。

此时编译会出错无法打开lib文件,下一步:在main工程文件上右键


在项目依赖项中勾选dll,再次生成解决方案,成功


结果正确




原创粉丝点击