先说一下我的使用环境:
系统: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位程序)
2、采用AnyCPU(勾选首选32位)
此时halcon.dll使用的是64位版本,一切都可以正常运行,见下图。
(此时程序是32位程序)
那么问题来了,不论是32位程序还是64位程序,在new HImage对象可以正常调用(事实是除了hdevenginedotnet.dll库中包含的内容以外的都可以正常使用),而偏偏在使用Engine相关的内容时就不支持64位了,会提示试图加载格式不正确的程序,
3、我也实测过,当程序编译为32位应用程序,并使用32位版本的Halcon.dll也不能正常使用,原因也是因为Engine引起的,详情见下图:
这个错误很奇怪,此时程序是32位的,但是替换成64位的halcon.dll后就一切正常了。
得出以下结论,当使用HDevEngine类库中的内容时,必须将程序编译位32位应用程序,同时使用64位版本的halcon.dll,才可以正常运行。
请各路大神指教下是什么原因?
|