51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 3603|回复: 7

[资料] VS2010与外部开发包的环境整合(含halcon或者相机)

[复制链接]
  • TA的每日心情
    开心
    昨天 10:42
  • 签到天数: 811 天

    连续签到: 21 天

    [LV.10]以坛为家III

    363

    主题

    1478

    帖子

    6388

    积分

    Rank: 9

    积分
    6388

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2016-4-18 22:48:05 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    开发库引用:
    重要说明:
    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。
        静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。
        动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。
    导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。

    那么,我们拿到开发包了以后主要看看里面的文件有哪几个?

    一般相机或者图像库的开发包一般包含以下3个目录:
    1.include文件夹:可以手动提取开发的头文件*.h放到该目录;
    2.lib文件夹:可以手动提取*.lib文件放到该目录,注意该文件里面只有编译用的符号没有实质的运行代码;
    3.bin文件夹:也就是最后我们的实际实现文件*.dll,相当于我们类里面的cpp,核心代码就在这里面;

    首先我们把这些文件放入到对应名称的文件夹,比如我已经提取了Halcon里面的文件,起名就叫HalconSDK;
    然后我们新建一个VC工程,将Halcon放置到解决方案的住程序目录下;

    比如新建MFC工程名字是HalconDemo,那么该工程的HalconDemo目录结构如下:
    ==========================================================
    HalconDemo.sln;
    HalconDemo文件夹
    注意,这个文件夹和解决方案目录名称是一样的,但这个是工程目录,开发包就放这个文件里面,和*.vcxproj文件在同一级
    例如:我这里工程是MERDEMO,那么他的主代码是放在MERDEMO\MERDEMO下面的,开发包也该放这个位置。
    QQ截图20160419100745.png
    ==========================================================

    放好了开发包以后进入到VC工程里,在工程名称右键“属性”打开属性页设置:
    1.C/C++里面第一项添加附加头文件目录里面添加代码:
    QQ截图20160418222419.png
    2.linker(链接器)里面 第九项添加导入库路径:
    QQ截图20160418222419.png
    以上两步的目的是把这两个目录作为程序里面引入文件的根目录,那么在文件里面引用文件就可以直接用基于当前路径的相对路径了
    如:
    $(ProjectDir)\HalconSDK\include
    $(ProjectDir)\HalconSDK\include\cpp
    这个是我添加的halcon 头文件的路径,那么我要HalconSDK\include\cpp下的halconcpp.h文件只需要在VC工程里面 任意一个头文件里面
    包含$include "halconcpp.h"就可以了?是不是很简单?不然就就得写多几个路径了。。。

    我们知道include的作用是把头文件链入到cpp里面,通过#include函数就可以实现头文件和cpp文件在一起了。声明了函数同时去实现,
    那么程序就没有问题了不是?
    但是,对于导入开发包来说是不是一样的呢?其实是一样的道理。
    刚刚我们制定了开发包的路径,同时引入了头文件,但是没有实现文件与之对应,那么我们编译程序是不是会出现一大堆的类似“无法找到外部符号”的错误啊?
    其实这个已经很明显了,因为我们的程序里面.h和.cpp都是对应好了,所以没有问题,但是对于开发包来说,他不可能把实现的源代码给你,
    你要的做的是什么,就是引入他给你提供的函数名称或者变量进行使用,那么引入了.h文件我们是不是就可以知道他的库里面有哪些函数或者
    变量了呢???
    但是,知道了函数或者变量,但是没法编译啊?所以,开发包里面给我们提供了一个叫.lib的引入库文件(不是静态库),该文件的目的就是告诉
    编译器,我是一个引导库文件,我的目的是把你刚刚输入进去的.h文件里面函数与我所对应的dll文件建立一个映射关系。告诉编译器,头文件里面的
    函数名称和我这里的函数实现映射关系可以对应,没有问题。所以,编译通过。。。

    但是,lib文件仅仅只用于编译阶段,他没有实际实现代码,全靠和他名称对应的dll才有用,所以当我们写完了代码以后,在运行的时候,需要把对应的
    .dll文件和exe放在一堆方可执行。

    为啥要放一堆呢???请自行百度exe调用dll的查找优先级。。。

    是不是很简单。。。

    还有一个问题就是,拿到别人的相机二次开发包怎么办???
    其实道理是一样的,按照上面的目录,我们分3个目录放进入,当然文件少的话就放一个目录也是可以的。
    这样的话,我们除了相机官方的头文件是不是还有一个我们自己封装的头文件呢???这些都是属于include文件夹的
    注意:我们在二次开发的时候已经引入过了,所以在生成的dll里面已经包含了正常的相机的代码,所以拿到头文件看看里面有没有变量是相机
    本身的,如果没有,那么只需要我们二次开发提供的头文件就可以了。。。
    那么最终的文件是:*.h *.lib *.dll
    和上面的引用是一样的,但是唯一区别在于,我们的dll里面的实现是不是依靠的是相机里面的dll啊?
    那在编译成功后,需要把我们二次封装后的dll和相机官方的dll一起放到exe同级的目录下,切记切记!!!

    本文纯手动打,请各位学员自己学习,请勿传播!!!
    珍重下个人劳动成果,这样才有更多的东西分享给你们!!! by hgzhu
    来自群组: VC++程序员家园
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    害羞
    2018-7-9 09:44
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    0

    主题

    32

    帖子

    617

    积分

    Rank: 6Rank: 6

    积分
    617
    发表于 2016-4-19 13:09:35 | 显示全部楼层
    精华帖子,赞一个:victory:

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    害羞
    2018-7-18 15:58
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    13

    帖子

    639

    积分

    Rank: 6Rank: 6

    积分
    639
    发表于 2016-6-28 08:42:10 | 显示全部楼层
    :handshake帮大忙了,终于明白该怎么弄了

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    0

    主题

    5

    帖子

    462

    积分

    Rank: 1

    积分
    462
    发表于 2016-11-1 14:00:05 | 显示全部楼层
    非常感谢  

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    振奋
    2020-3-9 08:42
  • 签到天数: 290 天

    连续签到: 2 天

    [LV.8]以坛为家I

    1

    主题

    63

    帖子

    1136

    积分

    Rank: 4Rank: 4

    积分
    1136

    活跃会员切换助手验证会员

    发表于 2017-9-7 16:10:36 | 显示全部楼层
    精华,受教深刻,谢谢!

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    叹气
    前天 00:03
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    12

    帖子

    32

    积分

    Rank: 1

    积分
    32
    发表于 5 天前 | 显示全部楼层
    看起来不错学一下。

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    CopyRight © 2015-2020 51Halcon机器视觉. Tencent Cloud X3.4.

    快速回复 返回顶部 返回列表