随笔(dll)

开始实习到现在两个多星期,总体来说现在的感觉还不错,毕竟刚开始么,没有太累,没有加班,一切都比较有节奏?对的,差不多就是这个词语吧。但是自己学习的时候总是会出现各种各样的问题,最主要是比较不常见,这我就纠结的很了,所以拿出来跟大家分享一下吧。今天开始。。

昨天在搞vs2010上的dll,这个东西搞得我很困惑哈,起初对这个就不了解吧,知道是动态链接库,原以为是动态链接数据库。。。可见悲催的程度了。好了,废话不多说,直接说我的收获及出现的问题和调试。

首先,dll到底是一个什么样的东西。以下是我作为初学者的理解,dll类似于黑盒,里面有你自己编译的各种库,供你使用,这东西只是提供了一个供你复用的机会,具体与直接“白盒复用”相比,好处如下:

  1. 后者暴露了源代码;
  2. 后者容易与程序员的“普通”代码发生命名冲突
  3. 后者多份拷贝,造成存储浪费;
  4. 后者更新功能模块比较困难。

好了 ,现在建立一个简单的dll,打开你的vs2010,新建一个 MFC工程, 选项为:MFC DLL,输入名称进入下一步 (我此时输入的是Max),现在的页面应该是 MFC DLL向导,左边的栏里有应用程序设置,单击进入,选择 DLL类型为:带静态链接MFC的规则的DLL,其他默认,OK。

下一步,将头文件夹包括头文件删除,源文件中的stdafx.cpp删掉,资源文件夹及文件删除。最后只留下源文件中的 Max.cpp ,Max.def 两个文件(外部依赖项不用管)。然后进入admin.cpp编辑如下命令:(首先全选后删除内容,下一步编辑)

#include <stdio.h>

__declspec(dllexport) int __stdcall admin(int a,int b){

 return (a>b?a:b);
}

完成后保存,右键点击max工作目录,点击属性,然后是选择配置属性,更改c/c++中的预编译头,将其 预编译头 设置为:不适用预编译头。就Ok。

 

好了 比较关键的一步,这是你在外部文件引用时需要特别注意的事项,我在用MT4软件引入dll,编译通过后,指标运行时一直找不到Dll文件的函数,让我诧异好一阵,问题就出在这。最关键的一个就是def文件,生成 DLL 时,.def 文件最有用。它的第一句话是 LIBRARY,这个后面的东西可以不写,但是它的Export,你最好写一下,作用是将DLL问价中的函数输出到其他程序。如果不修改,直接生成dll文件的话,你再拿eXescope.exe(专门用来查看dll文件的工具)去查看一下这个dll文件,你打开dll文件中,然后查看export项,你会发现你的函数名是根据一定规则生成的。但是不是你的原函数名,即不是max,所以你在其它语言文件中调用max的时候,会提示找不到dll文件中的function。当你在Export 后面修改成 Max以后,dll文件的函数外部导出就会生成Max.要注意,系统默认生成的dll文件中的内容并不是乱码,而只是一种编码方式,你的max文件如果是.c和.cpp,这两种情况下export默认生成的函数名是不一样的,但是有规则的。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值