Ruby调用DLL方法简介
创始人
2024-06-15 19:11:05
0

今天,我们要为大家讲解有关Ruby调用DLL的一些技巧方法,希望初学Ruby的朋友可以通过本文介绍的内容熟练掌握这一技巧应用。开源测试工具watir是采用的Ruby语言进行开发的。#t#

在研究watir框架的时候,发现有一部分函数watir没有提供而且暂时没找到合适的gem包,而很多功能在我们原来的自动化测试框架中都通过c写的dll进行了实现,于是我们希望能够把这部分的dll无缝的移植到watir上,减少我们的工作量,而且可以更高效的实现我们需要的功能。

在Ruby调用DLL的开源项目中,Win32Api这个gem可以实现我们需要的功能。通过以下方法 ,我们就可以调用外部dll中的函数。

Win32Api.new(dllname, proc, import, export)

参数说明

dllname:dll文件的名字,如果想只写dll的名字,可以将dll放到system32目录或者当前目录下,或者写上dll文件所在的路径

proc: dll中函数的名字

import:函数传入参数的参数类型,其中 "p" 对应指针,"n","l"对应long,"i"对应int,"v" 对应void,如果有多个参数,可以通过 ["p","n"]数组的方式来实现,其中置为nil可以表示没有参数

export:函数的返回值类型,参数类型同上

Win32API#call([args ...])

调用dll中的函数,参数和返回值应该与new申明中的一致,如果返回一个指针,需要事前初始化,否则可能会有内存溢出问题。

例子:

有个dll的头文件的申明为:

extern "C" long PASCAL EXPORT BMPToJPG(char *jpg,char *bmp);

那么在将指定的dll文件放在当前目录,Ruby调用DLL代码如下

 

  1. require 'rubygems'  
  2. require 'Win32Api'  
  3. JPG=Win32API.new(File.dirname(__FILE__)+"\\JpgDll.dll","BmpToJpg",["p","p"],"l")  
  4. JPG.call("D:\\1.bmp","D:\\1.jpg") 

执行上述Ruby调用DLL代码后,就能把D盘下的1.bmp文件另存为 1.jpg文件。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...