51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 164|回复: 2

[待解决] HDevEngine不支持64位程序的解决办法

[复制链接]

该用户从未签到

1

主题

5

帖子

13

积分

Rank: 1

积分
13
发表于 2020-4-18 10:29:22 | 显示全部楼层 |阅读模式

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

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

x
先说一下我的使用环境:
系统:Windows 10 X64
Halcon版本: 17.12
开发语言:C#

最近看到了Halcon的HDevEngine,可以在外部语言中像调用脚本一样的执行Halcon程序和过程,就想试试,说一下实验情况。
1、采用Any CPU(没勾选首选32位)此时halcon.dll使用的是64位版本,并且在new HDevEngine()前可以正常new HImage对象(具体情况见下图)
在执行private HDevEngine MyEngine = new HDevEngine();时抛出以下异常:

“System.BadImageFormatException”类型的未经处理的异常在 hdevenginedotnet.dll 中发生
其他信息: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

(此时程序是64位程序)

(此时程序是64位程序)

2、采用AnyCPU(勾选首选32位)
此时halcon.dll使用的是64位版本,一切都可以正常运行,见下图。

(此时程序是32位程序)

(此时程序是32位程序)



那么问题来了,不论是32位程序还是64位程序,在new HImage对象可以正常调用(事实是除了hdevenginedotnet.dll库中包含的内容以外的都可以正常使用),而偏偏在使用Engine相关的内容时就不支持64位了,会提示试图加载格式不正确的程序,


3、我也实测过,当程序编译为32位应用程序,并使用32位版本的Halcon.dll也不能正常使用,原因也是因为Engine引起的,详情见下图:
4.png
这个错误很奇怪,此时程序是32位的,但是替换成64位的halcon.dll后就一切正常了。


得出以下结论,当使用HDevEngine类库中的内容时,必须将程序编译位32位应用程序,同时使用64位版本的halcon.dll,才可以正常运行。


请各路大神指教下是什么原因?

(此时程序是64位程序)

(此时程序是64位程序)

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

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

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

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

该用户从未签到

1

主题

5

帖子

13

积分

Rank: 1

积分
13
 楼主| 发表于 2020-4-18 15:51:42 | 显示全部楼层
以上问题已经解决,主要原因可能是几个dll的版本混乱了导致的,有些内容可能是旧版本的dll中没有的或者签名不一致的,所以会报错。经过修正后,全部采用统一版本的dll问题就没有了
平时我们使用部分常用功能只需要放入Halcon.dll即可,但是使用HDevEngine需要额外的几个dll,如下截图: 5.png


再次谢谢论坛。

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

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

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

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

  • TA的每日心情
    开心
    2020-5-27 15:31
  • 签到天数: 76 天

    连续签到: 1 天

    [LV.6]常住居民II

    23

    主题

    102

    帖子

    3920

    积分

    Rank: 6Rank: 6

    积分
    3920
    发表于 2020-4-19 17:34:10 | 显示全部楼层
    给楼主我的一些经验,仅供参考:
    1.如果是应用程序内部直接使用引擎,建议不要用any cpu了,我的环境和你的差不多,不过halcon用的是12版本的,也是x64位的,工程直接配置成64然后使用,没有任何问题!
    2.引擎如果需要封装到dll中,那么一定要用any cpu(不要问我为什么这个是软件要求的),但是halcon是64位,如果写了构造函数或load调用了引擎相关操作的必然会引发BadImage错误,所以坚决不能在这两个函数里面进行初始化。
    3.使用any cpu会根据系统位数进行编译,勾选优先32位可能导致意想不到的错误,一般保持位数一致就不会错!

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

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

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

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

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

    本版积分规则

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

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

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

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

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