查看: 2382|回复: 3

[已经解决] 关于调用自已编写的dll问题,各位好汉帮下忙

[复制链接]
梦石
0
星屑
90
在线时间
85 小时
注册时间
2012-5-27
回帖
115
发表于 2013-2-27 21:52:17 来自手机 | 显示全部楼层 |阅读模式
悬赏1星屑已解决
    近日,我在编写一个脚本时遇到调用自己编写的dll时开始头痛.......
我一开始用:
Win32ApI调用,结果无效,才发现它只支持系统ApI函数....
我尝试在前加两行代码;
require 'rubygems'
require 'win32api'
Win32API......
发现找不到定义的那两个文件.....

接着又用;
extern.declare....
结果发现不支持....

最后我尝试调用系统API来调用我的dll,让我头痛的事又出现了,在调用系统ApI取游戏窗口句柄时却反回一个二近制字串符给我....这让老夫如何是好,所以想求众人帮助....

顺便给个类型表,包函所有内型,仿下例子;
i = 整数型
l = 长整数型
p = 子程序指针
.......

谢谢了,到时脚本写好后大家捧个场,呵呵......

最佳答案

查看完整内容

a = Win32API.new("dll名","函数名","参数类型","返回类型")#注意这只是loadlibrary加getprocadress a.call(参数1,参数2,...)#这里才是调用 调用自己写的dll是没问题的,注意dll名和函数名是否写错... 另外,参数类型就这么几个i和l时返回与返回值相等的整数,p时返回返回值指向的字符串,可以用字符串pack与unpack来转化... 还有"v"代表没有参数 ...
梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
回帖
1296
发表于 2013-2-27 21:52:18 | 显示全部楼层
本帖最后由 zhangbanxian 于 2013-2-28 09:32 编辑

a = Win32API.new("dll名","函数名","参数类型","返回类型")#注意这只是loadlibrary加getprocadress
a.call(参数1,参数2,...)#这里才是调用
调用自己写的dll是没问题的,注意dll名和函数名是否写错...
另外,参数类型就这么几个i和l时返回与返回值相等的整数,p时返回返回值指向的字符串,可以用字符串pack与unpack来转化...
还有"v"代表没有参数

点评

谢谢了,经过一番探究,我发现我做的dll函数名是中文,而win32api是找不到中文函数名称的,改成英文即可  发表于 2013-2-28 18:43
好歹当年也当过大魔王过,orz
回复

使用道具 举报

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
回帖
846
发表于 2013-2-27 23:00:45 | 显示全部楼层
变量 = Win32API.new(DLL名,……) ,dll放在游戏根目录下,我看很多脚本里都是这样调用的,并不是LZ说的那样吧?具体太专业的我也不懂。
湿滑落式骑!
回复

使用道具 举报

梦石
0
星屑
90
在线时间
85 小时
注册时间
2012-5-27
回帖
115
 楼主| 发表于 2013-2-28 06:53:30 来自手机 | 显示全部楼层
羞射了 发表于 2013-2-27 23:00
变量 = Win32API.new(DLL名,……) ,dll放在游戏根目录下,我看很多脚本里都是这样调用的,并不是LZ说的那 ...

win32api它只能调用内部系统ApI,如user32,shell32......

点评

API对我而言太高深了, 看不懂, LZ加油  发表于 2013-2-28 08:12
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部