VC++静态库以及动态库编程以及使用
来源:互联网 发布:汽车cae软件 编辑:程序博客网 时间:2024/06/03 18:58
VC++程序开发中,我们经常要用到自己开发的或者第三方的静态库或者动态库。
1.静态库使用,我们可以使用自己编译的lib库或者第三方lib库,只要把lib文件和头文件放在当前工程,lib文件可以通过#pragma comment(lib,"DLLTest.lib")或者通过vs编辑器工程属性的方式加载,使用lib库时生成.exe文件时,不需要依赖其他文件,会把lib文件编译进exe文件,这样生成的.exe文件就会偏大。
2.动态dll的使用,这里主要讲自己编写的DLL使用,VC++中我们可以把一些大的独立的功能模块编译生产DLL,亦可以把这些DLL使用在其他的工程,这里我们以一个求和的函数为例子。
a)实现讲下静态加载dll的方法,新建一个工程,添加文件
//addNum.hextern "C" __declspec(dllexport) int addNum(int a,int b);//addNum.cpp#include "AddNum.h"int addNum(int a,int b){return a + b;}
然后新建一个工程使用这个dll,这里不要引入头文件,代码为:
#include <stdio.h>#include <Windows.h>//#include "AddNum.h"#include <string>#include <iostream>using namespace std;//#pragma comment(lib,"DLLTest.lib")//extern "C" __declspec(dllimport) int addNumInt(int x,int y); typedef int (*FUCADDNUM)(int a,int b);FUCADDNUM pAddNum = NULL;string addString(){string tmp;tmp += "Hello";return tmp;}int main(){HMODULE m_hModule = ::LoadLibrary("E:\\LearnWorkPlace\\DLLTest\\Debug\\DLLTest.dll");pAddNum = (FUCADDNUM)::GetProcAddress(m_hModule, "addNum");int tmp = pAddNum(1,2);//int tmp = addNumInt(2,5);cout<<addString()<<endl;//int tmp = addNum(2,6);printf("addNum: %d\n",tmp);return 0;}这里需要定义函数指针。
b)运行时动态加载dll,代码为:
#include <stdio.h>#include <Windows.h>//#include "AddNum.h"#include <string>#include <iostream>using namespace std;#pragma comment(lib,"DLLTest.lib")extern "C" __declspec(dllimport) int addNum(int x,int y); //typedef int (*FUCADDNUM)(int a,int b);//FUCADDNUM pAddNum = NULL;string addString(){string tmp;tmp += "Hello";return tmp;}int main(){//HMODULE m_hModule = ::LoadLibrary("E:\\LearnWorkPlace\\DLLTest\\Debug\\DLLTest.dll");//pAddNum = (FUCADDNUM)::GetProcAddress(m_hModule, "addNum");//int tmp = pAddNum(1,2);//int tmp = addNumInt(2,5);cout<<addString()<<endl;int tmp = addNum(2,6);printf("addNum: %d\n",tmp);return 0;}
这里在不需要头文件时,我们需要自己申明extern "c" __declspec(dllimport) int addNum(int x,int y)才能使用,需要把dll放在EXE目录,不然运行不了,也需要主动连接lib。如果不主动声明,需要包含头文件,DLLMain函数没自己写的话,系统自动会默认生产DLLMain。
0 0
- VC++静态库以及动态库编程以及使用
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别.
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- 静态库,动态库,以及Framework
- Release版本以及静态&动态链接库
- Linux C语言开发 动态链接库以及静态链接库编程简单介绍
- Linux C开发 动态链接库以及静态链接库编程简单介绍
- 怎样在VC++动态链接库(DLL)编程之库的查看以及调试呢?
- 动态库和静态库的使用以及gdb调试器的使用复习
- 如何使用gcc编译静态库和动态库?以及如何使用?
- VC静态链接库的使用方法 以及jsoncpp使用方法
- C/C++ 编译器和调试器以及静态库、动态库使用汇总
- C/C++ 编译器和调试器以及静态库、动态库使用汇总
- C/C++ 编译器和调试器以及静态库、动态库使用汇总
- C/C++ 编译器和调试器以及静态库、动态库使用汇总
- linux下c/c++编译器和调试器以及静态库、动态库使用汇总
- C/C++ 编译器和调试器以及静态库、动态库使用汇总
- 开发板挂载nfs系统错误“rpcbind: server localhost not responding, timed out”
- Androidstudio开发没有activity的应用必须重新配置
- 接口的多态
- ADO.NET总结
- oracle 导入导出表数据
- VC++静态库以及动态库编程以及使用
- tcpdump
- PAT 1010. Radix (25)
- scrapy(一)爬取动态网站
- 使用Jersey和Apache Tomcat构建RESTful Web服务
- 继承
- die和exit的区别
- java SWT入门:自定义背景透明且可鼠标拖动改变尺寸和位置的Composite
- 第十四周项目1(1)-验证折半算法