问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

如何创建与调用动态链接库的文件

提问网友 发布时间:2025-01-26 01:58
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2025-01-26 01:56
动态链接库:dll不必被包含在最终的EXE中,EXE文件执行时可以动态地引用和卸载DLL文件。  同时,静态链接库中不能再包含其他的动态链接库或静态库,而动态链接库中可以包含其他的动态或静态库。  VC++支持的DLL:  DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。  导出函数的声明方式:  一种在函数声明类型和函数名之间加上“_declspec(dllexport)”。  另外一种采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下:  LIBRARY 库工程名称  EXPORTS 导出函数名  DLL的调用方式:  一种静态调用,由编译系统完成对DLL的加载和应用程序结束时DLL的卸载。  另外一种动态调用,由编程者用API函数加载和卸载DLL(DLL加载—DLL函数地址获取—DLL释放)方式。  所有库工程编译时必须Release方式:  Build—set active configuration—选择库工程的release方式  示例:  一、 函数----创建动态链接库(MFC规则DLL)  1. New--projects--MFC AppWizard(dll)--Regular DLL using shared MFC DLL //取名为MFC_dll  2. def文件中添加:函数名(Add_new)  3. h文件中添加:外部函数声明//求和函数,函数名为Add_new  extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);  4. cpp文件中添加: 外部函数实现  extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b)  {  return a+b;  }  5. build--set active configuration--win32 release--ok  6. 生成  7. 根目录下release文件夹中dll,lib与根目录下h文件即为所需  二、 函数----调用动态链接库(把MFC_dll.dll和MFC_dll.lib拷到工程所在目录)  //静态调用(.h可以写到.cpp文件中)  1. new--projects--win32 console application--an empty project  2. 添加h文件:(test.h)  #pragma comment(lib,"MFC_dll.lib") //告诉编译器DLL相对应的lib文件所在路径和文件名  extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b);//声明导入函数  3. 添加cpp文件:(main.cpp)  #include "test.h"  int main()  {  coutAdd_new(10,3);  return 0;  }  //动态调用  #include stdio.h  #include windows.h  typedef int (* lpAddFun)(int ,int);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型  int main()  {  HINSTANCE hDll;//句柄  lpAddFun addFun;//函数指针  hDll=LoadLibrary("dllTest.dll");//动态加载DLL模块句柄  if(hDll)  {  addFun=(lpAddFun) GetProcAddress(hDll,"Add_new");//得到所加载DLL模块中函数的地址  if(addFun)  {  int result=addFun(2,3);  printf("%d",result); } FreeLibrary(hDll);//释放已经加载的DLL模块  }  return 0;  }  三、 变量----创建动态链接库(非MFC DLL)  1. new---projects---win32 dynamic-link library----an empty project(Sample)  2. 添加sample.h  #ifndef SAMPLE_H  #define SAMPLE_H  extern int dllGlobalVar;  #endif  3. 添加 sample.cpp  #include "sample.h"  #include windows.h  int dllGlobalVar;  bool APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)  //windows在加载DLL时,需要一个入口函数,就如同控制台或DOS程序需要main函数、win32程序需要winmain函数一样。所以引入一个不做任何操作的缺省DllMain的函数版本。是DLL的内部函数。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

三脚架的高度怎么选 三脚架的高度多少合适 ios微信怎么设置指纹支付 iphone微信支付怎么设置指纹 白血病为何来得这么突然?白血病分哪几种? 团购达人自己购买有佣金吗 团购达人分几个等级 中望cad哪个版本好用 在中望CAD官网http://www.zwcad.com/下载软件需要付费吗? 宝宝吃了布洛芬不退烧怎么办 儿童意外险100元可以买到吗? 平安熊孩子卡多少钱(附投保案例) 微信不想要的人怎么删除掉他 怎么在微信上删人 徐其修凉茶加盟优势, 徐其修凉茶代理条件 徐其修简介 徐其修成长故事 徐其修公司概况 徐其修凉茶 西丽路店怎么样 ps如何前进后退一步 男孩狠一点的空间说明 C语言从DLL获得符号 修复iPhone版YouTube上出错的8大方法 苹果电脑连wifi不让输密码苹果电脑连不上wifiwpa2密码总是无效怎么回... 甘F是哪里的车牌代码 甘F车牌代码归属地,甘F是哪里的车牌,? 办公座椅哪个品牌好 办公椅哪个品牌好 椅子的品牌哪个好 办公椅买什么牌子好 办公座椅哪个质量好 电脑座椅哪个牌子的最好电脑椅品牌排行榜前十名 古诗题材如何分类? 10岁小孩写作业磨蹭注意力不集中怎么办 深圳社保卡绑定社康怎么变更 光固化软管多少钱 热水软管多久换 龙头软管多久需要换 翡翠泡水里一夜可以吗 表单用div布局还是table布局效果好?或者说各有什么利弊?用div的话需 ... html表单怎么居中 html表单居中方法
Top