Nim语言导入FreeImage模块失败could not import: FreeImage_Initialise

本来看到nim语言有个图像处理的wrapper的, 就是lib页面的 freeimage, 地址  https://github.com/barcharcraz/nim-FreeImage


实用nimble install freeimage 之后,  再下载上面的源码里的test和图片, 编译通过, 运行报错!

could not import: FreeImage_Initialise


真是百思不得其解, 后来我摸索不出来结果. 也就暂时搁置了. 知道看到nim的官方论坛上有人提起这个事情, http://forum.nim-lang.org/t/1721

才知道不是我一个人遇到这个问题.


问题的根源在于, windows的dll, 32位和64为的dll内部函数名字命名规则不一样, 32为的函数, 默认在函数的名字前加了一个下划线, 而64位的不加下划线.   这个wrapper作者用的是64位的, 因此没有问题, 但是32位的就有问题了. 


因此解决的方法很简单, 把FreeImage_Initialise 替换为 _FreeImage_Initialise@4 即可. 


问题来了, @符号是什么意思, 这个不管, 是win32的dll自动命名加的, 那么4是啥意思, 就是FreeImage_Initialise(参数), 这个函数的参数占用几个字节的意思.


然后, 剩下的问题就是, 逐个替换 freeimage.nim中的函数名字了.


这里, 我已经替换完了, 地址在  https://github.com/encorehu/nim-FreeImage


替换的方法是打开freeimage.dll, 然后搜索  FreeImage_Initialise, 就会发现, 在  FreeImage_Initialise的附近, 有很多的函数, 都是前面带下划线的, 后面带@符号和参数占用字节数的. 我开始手工替换了几十个, 后来发现太累了, 后来写了个脚本来替换.


脚本在这: http://blog.csdn.net/huyoo/article/details/49690457


然后覆盖C:\Documents and Settings\Administrator\.nimble\pkgs\nim-freeimage-0.1 下的freeimage.nim文件


再到BasicTest.nim所在目录, 删掉nimcache这个编译的cache目录, 然后重新编译 nim c BasicTest

再运行 basictest


得到结果了:


D:\DEV>basictest
ref 006f0168 --> [biSize = (invalid data!),
biWidth = 1280,
biHeight = 960,
biPlanes = 1,
biBitCount = 32,
biCompression = (invalid data!),
biSizeImage = (invalid data!),
biXPelsPerMeter = 2835,
biYPelsPerMeter = 2835,
biClrUsed = (invalid data!),
biClrImportant = (invalid data!)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值