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

一般上什么网站重庆网站建设就选承越

一般上什么网站,重庆网站建设就选承越,好的企业管理网站,易语言怎么制作网站静态加载、动态加载和延迟加载 dll加载方式大致可以分为3类#xff1a;静态加载、动态加载和延迟加载 1.静态加载#xff0c;dll的加载发生在程序main函数启动前。 2.动态加载#xff0c;使用LoadLibrary或者LoadLibraryEx来加载一个dll。当dll加载成功时#xff0c;你会…静态加载、动态加载和延迟加载 dll加载方式大致可以分为3类静态加载、动态加载和延迟加载 1.静态加载dll的加载发生在程序main函数启动前。 2.动态加载使用LoadLibrary或者LoadLibraryEx来加载一个dll。当dll加载成功时你会得到一个非空的HMODULE。接下来你可以使用GetProcAddress来获取这个HMODULE中的导出接口了。你可以理解成静态链接的lib其实是帮我们在很早的时候就完成了这些事情。使用LoadLibrary有一些细节需要注意。首先是路径它会在一些特定的路径寻找dll如果没有找到则会报错。当成功加载了dll后crt会初始化dll中的全局变量并且HMODULE的引用计数会1。如果LoadLibrary多次在绝大部分的情况下第一次之后的LoadLibrary会返回第一次的HMODULE并且增加引用计数。所以LoadLibrary要和FreeLibrary成对出现如果你想要释放一个dllload了多少次就要free多少次。 3.延迟加载是当dll需要时才会被加载。为了使用一个延迟加载的dll我们在生成exe的时候需要更改链接器的一些设置表示我们要用哪些延迟加载的dll 动态载入 DLL方式 动态链接的情况下有两个文件一个是LIB文件一个是DLL文件。LIB包含被DLL导出的函数名称和位置DLL包含实际的函数和数据应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中存放的不是被调用的函数代码而是DLL中相应函数代码的地址从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行否则应用程序会产生错误。如果不想用lib文件或者没有lib文件可以用WIN32 API函数LoadLibrary、GetProcAddress装载。动态载入方法是用 LoadLibrary 函数加载动态链接库到内存用 GetProcAddress函数动态获得 DLL 函数的入口地址。当一个 DLL 文件用 LoadLibrary 显式加载后在任何时刻均可以通过调用 FreeLibrary 函数显式地从内存中把它给卸载。 动态调用使用的 Windows API 函数主要有 3 个 分别是 LoadLibrary、 GetProcAddress 和FreeLibrary。 显示隐式加载 动态链接库有两种加载方式隐式加载和显示加载隐式加载又叫载入时加载指在主程序载入内存时搜索动态库并将动态库载入内存。隐式加载也会有静态链接库的问题如果程序稍大加载时间就会过长用户不能接受。显式加载又叫运行时加载指主程序在运行过程中需要动态库中的函数时再加载。显式加载是将较大的程序分开加载的程序运行时只需要将主程序载入内存软件打开速度快用户体验好。 显示加载extern c 的意义 C程序或库、目标文件中所有非静态non-static函数在二进制文件中都是以“符号symbol”形式出现的。这些符号都是唯一的字符串从而把各个函数在程序、库、目标文件中区分开来。在C中符号名正是函数名两者完全一样。而C允许重载不同的函数有相同的名字但不同的参数甚至const重载并且有很多C所没有的特性──比如类、成员函数、异常说明──几乎不可能直接用函数名作符号名。为了解决这个问题C采用了所谓的name mangling。它把函数名和一些信息如参数数量和大小杂糅在一起改造成奇形怪状只有编译器才懂的符号名。例如被mangle后的foo可能看起来像foo4%6^或者符号名里头甚至不包括“foo”。 其中一个问题是C标准并没有定义名字必须如何被mangle所以每个编译器都按自己的方式来进行name mangling。有些编译器甚至在不同版本间更换mangling算法尤其是g 2.x和3.x。说过在显示调用动态库中的函数时需要指明调用的函数名即使您搞清楚了您的编译器到底怎么进行mangling的从而知道调用的函数名被C编译器转换为了什么形式但可能仅仅限于您手头的这个编译器而已而无法在下一版编译器下工作。 extern C即可以解决这个问题。用 extern C声明的函数将使用函数名作符号名就像C函数一样。因此只有非成员函数才能被声明为extern C并且不能被重载。尽管限制多多extern C函数还是非常有用因为它们可以象C函数一样被dlopen动态加载。冠以extern C限定符后并不意味着函数中无法使用C代码了相反它仍然是一个完全的C函数可以使用任何C特性和各种类型的参数。所以extern C 只是告诉编译器编译和链接的时候都用c的方式的函数名字函数里的内容可以为c的代码也可以为c的。 隐式调用 隐式调用不需要包含头文件dlfcn.h只需要包含动态链接库中的头文件使用动态库中的函数也不需要像显示调用那么复杂。 可以参考静态库和动态库的制作。这个链接中调用动态库的方式就是隐式调用。 显示和隐式的区别 根据上面的显式调用和隐式调用的实例可总结显示和隐式的区别如下 1、 隐式调用需要调用者写的代码量少调用起来和使用当前项目下的函数一样直接而显式调用则要求程序员在调用时指明要加载的动态库的名称和要调用的函数名称。 2、隐式调用由系统加载完成对程序员透明显式调用由程序员在需要使用时自己加载不再使用时自己负责卸载。 3、由于显式调用由程序员负责加载和卸载好比动态申请内存空间需要时就申请不用时立即释放因此显式调用对内存的使用更加合理 大型项目中应使用显示调用。 4、当动态链接库中只提供函数接口而该函数没有封装到类里面时如果使用显式调用的方式调用方甚至不许要包含动态链接库的头文件需要调用的函数名是通过dlsym函数的参数指明的而使用隐式调用时则调用方必须要加上动态库中的头文件g编译时还需要要用参数-I指明包含的头文件的位置。需要注意的是当动态链接库中的接口函数是作为成员函数封装在类里面时即使使用显式调用的方式调用方也必须包含动态库中的相应头文件详见五、显示调用动态链接中的类成员函数。 5、显式调用更加灵活可以模拟多态效果。 6、显式调用的方式必须加入头文件dlfcn.hmakefile中的链接命令中要加入参数-ldl需要用dlopen加载库dlsym取函数符号(函数名应用新定义的)dlclose卸载库。 7、隐式调用的方式makefile中的链接命令中要加入参数-l加库名直接用库里的函数名就可以。
http://www.w-s-a.com/news/239675/

相关文章:

  • 杭州网站推广大全网站建设演讲稿
  • 厦门网站的制作太仓专业网站建设
  • 天津公司网站建设公司哪家好在阿里巴巴国际网站上需要怎么做
  • 网站关键词seo推广公司哪家好无锡市无锡市住房和城乡建设局网站
  • 开远市新农村数字建设网站网站如何做QQ登录
  • 自己做个网站教程高端网站开发哪家强
  • 网站模板免费下载中文版大连网站建设哪家专业
  • 网站建设的基本代理公司注册公司坑人
  • 企业网站被黑后如何处理wordpress邮件发送类
  • 北京网站的网站建设公司建设工程竣工验收消防备案网站
  • 淄博市 网站建设报价wordpress里的发消息给我
  • 网站下拉菜单怎么做游戏网站模板免费下载
  • 阿里云上做网站套模板怎么做一个网站开发小组
  • 营销型网站源码下载青岛做网站建设的公司哪家好
  • 迁西网站定制怎么制作网址内容
  • 深圳装饰公司网站宁波网站建设哪里有
  • 建站网站破解版怎么看自己的网站是用什么做的
  • 做微商那个网站好织梦模板更新网站
  • 网站注册表单怎么做手机做网站需要多少天
  • 书店商城网站html模板下载企业网站建设方案书范文
  • 建设网站是普通办公吗快速排名seo软件
  • 大型外贸网站建设网站建设图片尺寸要求
  • 网站建设可信赖北京网站开发月薪
  • 专门做lolh的网站wordpress 模版 cho's
  • 网上做设计兼职哪个网站好点网站开发毕业周记
  • 自学商城网站建设无为网页定制
  • wordpress全站cdn手机网站调用分享
  • 淄博做网站58同城wordpress微信号订阅
  • 不同的网站 做301公共资源交易中心是干嘛的
  • 36 氪 网站如何优化怎么优化自己的网站