Reiase's Blog

Happy coding

用Cython编写Wrapper

在Linux下链接win32 DLL

Reiase posted @ 2009年9月29日 12:34 in 编程杂项 , 3230 阅读

最近拿到一款IP摄像机,SDK只有win32版本。闲来无聊,就试了试在Linux下调用SDK里的DLL来控制摄像机。
在Linux下调用Windows DLL主要面临两个问题:

  • DLL的加载。DLL可执行文件格式与Linux下的so文件格式类似,wine与mplayer等程序都是可以加载dll。为了实现方便,我们借助wine来加载DLL
  • DLL中函数会进行windows系统调用,或者调用其他windows库。为了避免麻烦,我们也让wine处理这些调用

利用wine,仅需三步即可链接DLL库

  1. 导出dll文件的spec文件
    winedump spec -I. yourlib.dll
    该命令生成yourlib.spec文件。可能需要用”-I”添加dll文件对应的头文件目录,不然dll导出的符号,找不到原型,挥别忽略。
  2. 生成def文件
    winebuild –def -E yourlib.spec -o libyourlib.def
    这里需要指定def文件名为libyourlib.def,gcc查找库的时候需要lib这个前缀
  3. 编译程序
    winegcc -L. -lyourlib main.c -o main

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter