当前位置: 首页 > news >正文

网站建设最好用什么语言大型门户网站都有

网站建设最好用什么语言,大型门户网站都有,企业网站建设与管理期末考试,app界面设计模板素材免费如题#xff0c;我们本篇介绍如何制作DLL#xff0c;将代码类中的方法以接口的形式暴露出来给exe程序使用。会涉及类厂创建方法实例、声明DLL接口、.def文件的使用等。 目录 一、DLL介绍 二、C制作DLL文件 2.1 DLL端 2.2 调用端 三、DLL导出类方法 四、COM技术制作DLL…        如题我们本篇介绍如何制作DLL将代码类中的方法以接口的形式暴露出来给exe程序使用。会涉及类厂创建方法实例、声明DLL接口、.def文件的使用等。 目录 一、DLL介绍 二、C制作DLL文件 2.1 DLL端 2.2 调用端 三、DLL导出类方法 四、COM技术制作DLL 一、DLL介绍 我理解的DLL是windows下的可执行文件也就是PE文件学名动态链接库。一般调用DLL也称加载DLL的是EXE文件。它是一种可重用的代码和数据的集合可以由多个应用程序同时使用与静态链接库不同动态链接库在运行时加载到内存中以供应用程序使用。 一个exe程序可以带若干个dll如下图 正常的windows程序基本都会带DLL包括操作系统内核的DLL所以很关键。 DLL具有以下优点 可重用性由于多个应用程序可以共享一个DLL因此它们可以共享相同的代码和数据从而提高了代码的可重用性。         节省内存由于DLL在运行时才加载到内存中因此它们可以在不占用过多内存的情况下提供所需的功能。         易于更新当需要更新DLL时只需替换现有的DLL文件即可而无需重新编译使用该DLL的应用程序。         动态链接DLL在运行时才链接到应用程序中因此它们可以在应用程序启动后动态加载从而提高了应用程序的启动速度。         稳定性由于多个应用程序共享相同的DLL因此如果DLL中的代码或数据发生问题则可以在一次更新后修复所有使用该DLL的应用程序。 使用DLL的过程分为两个步骤首先需要创建一个DLL然后在需要使用该DLL的应用程序中加载它。为了使DLL中的函数可以在应用程序中使用必须将其导出可以使用__declspec(dllexport)修饰符来导出DLL中的函数和数据。而在应用程序中调用DLL中的函数需要使用LoadLibrary()函数来加载DLL并使用GetProcAddress()函数获取DLL中导出函数的地址然后使用函数指针来调用这些函数。 在Linux下与之对应的是.so文件。MacOs下为.dylib。 二、C制作DLL文件 需要打开你的windows Visual Satdio任意版本。可以直接选择创建DLL文件也可以先创建平台程序后续再改。 这里直接展示一段简单的代码。 2.1 DLL端 DllDLL.h: #pragma once #ifdef MYLIBRARY_EXPORTS #define MYLIBRARY_API __declspec(dllexport) #else #define MYLIBRARY_API __declspec(dllimport) #endifMYLIBRARY_API int Add(int a, int b); DllDLL.cpp: #include DllDLL.hint Add(int a, int b) {return a b; } DllDLL.def模块定义: LIBRARY GeneratrDLL EXPORTS Add 1模块定义需要在这设定 重点 .def文件也称为导出文件是一种Windows平台上的文件格式用于描述可执行文件或动态链接库DLL中导出函数的名称和地址。当编写一个DLL并将其与其他应用程序链接时该DLL中的函数必须明确导出以便其他应用程序能够调用这些函数。 2.2 调用端 代码 #include ..\DllDLL\DllDLL.h #include windows.h #include iostream typedef int(*AddFunc)(int, int);int main() {HINSTANCE hinstLib LoadLibrary(TEXT(DllDLL.dll));if (hinstLib ! NULL){AddFunc add (AddFunc)GetProcAddress(hinstLib, Add);if (add ! NULL){// 调用 DLL 中的函数int result add(1, 2);std::cout result std::endl;}}}将UseDllDLL设置为启动项运行结果DLL内部返回方法的结果 三、DLL导出类方法 我们定义一个MyInterface基类里面实现虚方法再生成一个它的派生类实现虚方法最后创建类工厂让客户端代码更容易实例化类对象。 // MyInterface.h #ifndef MY_INTERFACE_H #define MY_INTERFACE_Hclass MyInterface { public:virtual ~MyInterface(){}virtual void DoSomething() 0;virtual int GetNumber() 0; };class MyImplementation : public MyInterface { public:virtual void DoSomething() override;virtual int GetNumber() override; }; #endif // MY_INTERFACE_H// MyImplementation.cpp #include MyInterface.hvoid MyImplementation::DoSomething() {// }int MyImplementation::GetNumber() {return 49; }// MyDLL.h #ifndef MY_DLL_H #define MY_DLL_H#ifdef MY_DLL_EXPORTS #define MY_DLL_API __declspec(dllexport) #else #define MY_DLL_API __declspec(dllimport) #endif#include MyInterface.hMY_DLL_API MyInterface* CreateMyObject();#endif // MY_DLL_H// MyDLL.cpp #define MY_DLL_EXPORTS #include MyDLL.h #include MyInterface.hMyInterface* CreateMyObject() {return new MyImplementation(); } 上面代码的最后两端将MyInterface* 类的对象作为导出接口它的我实现是返回它的派生类MyImplementation类的实例对象。客户端可以使用CreateMyObject获得实例。 客户端调用DLL首先要有实现DLL的头文件MyInerface.h然后去调用具体 #include ..\GeneratrDLL\MyInterface.h #include Windows.h #include iostreamint main() {// 加载DLLHMODULE hModule LoadLibrary(LC:\\Users\\liubw\\source\\repos\\GeneratrDLL\\x64\\Debug\\GeneratrDLL.dll);if (hModule ! NULL){// 获取接口typedef MyInterface* (*CreateMyObjectFunc)();CreateMyObjectFunc fun (CreateMyObjectFunc)GetProcAddress(hModule, CreateMyObject);if (fun ! NULL){// 使用接口MyInterface* myObject createMyObject();myObject-DoSomething();int number myObject-GetNumber();std::cout number std::endl;delete myObject;}else{// 无法获取接口}// 卸载DLLFreeLibrary(hModule);}else{// 无法加载DLL}return 0; } 其中typedef MyInterface* (*CreateMyObjectFunc)();声明了MyInterface*函数指针的函数CreateMyObjectFunc并且没有参数我们可以用CreateMyObjectFunc代替返回值为MyInterface*的函数的声明。具体如下 https://bobowen.blog.csdn.net/article/details/129189507?spm1001.2014.3001.5502 四、COM技术制作DLL 这个是老技术比较复杂后续更新。
http://www.dnsts.com.cn/news/186174.html

相关文章:

  • 怎样做网站的排名百度官方电话人工服务电话
  • 什么样的网站需要备案摄影网站设计
  • 网站带gov后缀主流网站关键词排名
  • 建设银行网站适用浏览器学生想搭建网站怎么做
  • 域名注册在那个网站好手机应用下载网站源码
  • 做网站开源更多标签的下载方法
  • 如何用word做简单的网站桥梁建设 网站
  • 视频购物网站开发方案微生成网站
  • 云建站空间做背景网站
  • 做企业网站注意安微凤阳县建设局网站
  • 做presentation的网站菏泽到濮阳
  • 微信网站建设哪家好青岛seo排名收费
  • 用织梦做网站需不需授权企业网站开发
  • 网站标题更新优化模型
  • 西安机场商务宾馆百度做网站四川攀枝花网站建设
  • 做电子商务网站建设工资多少怎么做球球业务网站
  • 成都的网站设计公司价格大连网站设计案例
  • 标准化班组建设网站泸州市建设局网站
  • 信贷网站建设公司网站的建设与运营管理制度
  • 设计医院网站建设pda智能巡检系统
  • 怎么自己用手机做网站西安在线网站
  • 建网站公司要钱吗做外贸学网站
  • 怎么上传网站模板青岛网站建设要多少钱
  • 顺德制作网站价格多少wordpress主题等
  • 网站万能密码修复建网站免费软件
  • wordpress 企业网站模板WordPress搜索词记录
  • 东山网站建设建立网站每项内容可以设计成什么
  • spd2007怎么创建网站金泉网 网站建设
  • 做外贸怎样上外国网站wordpress 网页 登录界面
  • 个人网站设计html西安建设局网站