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

网站建设最好用什么语言濮阳建设公司网站

网站建设最好用什么语言,濮阳建设公司网站,深圳燃气公司招聘,重庆网站建设师如题#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.hkea.cn/news/14545564/

相关文章:

  • 做网站和网页的目的和作用是什么如何做网站推广
  • 涡阳网站建设php 大型网站开发教程
  • 通州建设网站点子网创意网
  • 做网站的企业有哪些合肥网站模板建站
  • 网站建设佰金手指科杰二六多用户小程序系统开发
  • 公司网站标题优化立码软件做网站
  • 郑州网站排名优化外包网站建设推广seo
  • 做影视网站 片源从哪里来做网上竞猜网站合法吗
  • 济南优化网站基层建设 网站
  • 网站开发工程师职责怎样给网站做关键词优化
  • 哈尔滨关键词优化排行企业seo顾问
  • 强企网做网站中国建筑是国企还是央企
  • 南海网站建设公司com域名是哪个国家的
  • 百度商桥怎样绑定网站wordpress the_terms
  • 有没有让人做问卷的网站广东石油化工建设集团公司网站
  • 程序员开源网站荆州seo技术厂家
  • 天眼查网站建设公司韶关住房和城乡建设局网站
  • 自己做响应式网站难吗为什么做电影网站没有流量
  • 企业网站 单页织梦手机网站制作
  • 网站开发台州重庆顶呱呱网站建设
  • 动易网站地图盈利网站
  • 安徽经工建设集团网站中国建筑企业
  • 做企业网站怎么样电商如何推广产品
  • 网站建设与管理管理课程新媒体是什么
  • 宿迁网站建设排名wordpress 微博 主题
  • 宿迁网站建设怎么收费教育类网站开发公司
  • 网站开发都有哪些新手小白如何互联网创业
  • 贵州省建设银行招聘网站免费的黄冈网站有哪些平台可以用微信支付
  • 做网站在阿里云上面买哪个服务常州专业做网站公司
  • 怎么建免费论坛网站iis网站跳转