关键代码:DLL: extern char *AddStringX(char *a) { return a;}————————————————————————Ruby调用:require 'Win32API'def addStringX(a)return Win32API.new('DemoDLL','AddStringX','p','p').call(a)endprint addStringX("Test") #显示的是内存地址,无法显示字符串__________________________________________________第二个问题,求指点:DLL编程如何引用需要的DLL或部分函数?比如引用user32.dll的部分函数,写在什么地方?于是跟此相关的问题:某编译前的DLL工程,整个工程搜索"user32"没有找到,但是编译后却神奇地引用它了,求解!
2 回答
桃花长相依
TA贡献1860条经验 获得超8个赞
Win32API.new('DemoDLL','AddStringX','p','p').call(a)
先检查看看参数a是否是字符串,有必要的话就a.to_s.再看C的DLL返回的数据是否为字符或者字符串。个人感觉是DLL的问题,如果不行就试试下面的。
win32api应该是比不上dl库,试试使用dl库
require 'dl'
myd1=DL.dlopen('DEMO.dll')
myd2=myd1['AddStringX','CS']
print myd2.call('Test')
或者是print mydll.call('Test').to_s
好久没用Ruby,搞不清楚了。
第二个问题
DLL直接在开头include不就ok了,
之后直接调用函数就可以了。。。
一些系统关键DLL应该默认就include的了,直接调用内部的函数就可以了
没有写过C的DLL只是根据经验而已,DLL应该和普通的exe在调用dll上没区别。
可惜你的DLL给的代码太少了。
- 2 回答
- 0 关注
- 82 浏览
添加回答
举报
0/150
提交
取消