首页 / C++ / C++动态链接库的调用
C++动态链接库的调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++动态链接库的调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2123字,纯文字阅读大概需要4分钟。
内容图文
![C++动态链接库的调用](/upload/InfoBanner/zyjiaocheng/719/4f1b4edb10d942469cce6bdb2ecf61c6.jpg)
版权声明:本文为转载文章,遵循?CC 4.0 BY-SA?版权协议,转载请附上原文出处链接和本声明。
原为文链接:https://blog.csdn.net/sinat_35866463/article/details/80901327
DLL的动态调用:
首先创建一个DLL的文件,CreateDLL
在CreateDLL.h文件中声明你所需要供其他文件调用的函数:
extern "C" _declspec(dllexport) CREATEDLL_API void printMax(int&,int&);
CREATEDLL_API void printMax(int&,int&);
说明:
(1)前面的 extern “C” 告诉编译器函数可以在本模块或其他模块中使用,其中“C”表明需按照C语言方式编译和连接它,因为C++编译时,会对函数名进行修饰,用于实现函数重载,而C里面没有这个功能,所以需要用extern “C”在头文件进行声明的时候加以区分,以便链接时能进行正确地函数名查找。
(2)_declspec(dllexport)为导出函数关键字,意为需从DLL中导出该函数,以便使用。
(3) printMax 便是自己写的自定义函数了
完成之后在CreateDLL.cpp文件中,添加对printMax函数的定义:
CREATEDLL_API void printMax(int &a,int &b){
cout<<"the max number is: " <<((a>b)?a:b) << endl;
}
然后便是编译了,编译成功的话会生成一个.dll的文件
调用:
新建一个空的.cpp 项目,填写代码如下:
#include<Windows.h>
#include<iostream>
typedef void(*FUNA)(int&,int&);
typedef void(*FUNB)(int&,int&,int&);
int main()
{
const char* funName1 = "printMax";
int x, y, z;
HMODULE hDLL = LoadLibrary(L"CreateDLL.dll");
if(hDLL != NULL)
{
FUNA fp1 = FUNA(GetProcAddress(hDLL,funName1));
if(fp1 != NULL)
{
std::cout<<"Input 2 Numbers:";
std::cin>>x>>y;
fp1(x,y);
}
else
{
std::cout<<"Cannot Find Function "<<funName1<<std::endl;
}
FreeLibrary(hDLL);
}
else
{
std::cout<<"Cannot Find "<<dllName<<std::endl;
}
return 1;
}
说明:
首先typedef 定义一指向void (int&,int&)的函数指针,
HMODULE hDLL = LoadLibrary(L”CreateDLL.dll”); 加载DLL文件,
FUNA fp1 = FUNA(GetProcAddress(hDLL,funName1)); 往DLL文件中取出目标函数
若能够正确取到函数所在地址,直接调用即可完成DLL的动态调用。
静态调用:
静态调用比较简单粗暴,直接将生编译DLL 文件生成的.dll,.lib,.h文件全部拷贝到要调用函数的exe文件所在的目录下,在调用的.cpp文件中把.h头文件添加进来即可完成DLL的静态调用
内容总结
以上是互联网集市为您收集整理的C++动态链接库的调用全部内容,希望文章能够帮你解决C++动态链接库的调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。