先检查看看参数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给的代码太少了。
system(“.ruby”)或者load 'another.rb'具体代码如下:
# 返回ls的输出
s=`ls`
cmd= "ls"
s= `#{cmd}`
# 返回true or false
s= system('ls')
cmd= 'ls'
s= system(cmd)
#返回输出
s= %x[uptime]
#用top进程替换当前ruby进程
exec "top"
cmd = 'top'
exec cmd
值传递仅仅传递的是值引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。
用数组来举例就最清楚了,例如我们定义一个数组a[]={1,2}
那么a[0]=1,a[1]=2。
如果我们把数组a里的元素值作为参数传递,实际上只是进行了值传递,对数组本身没有影响
如果我们把 数组a的指针作为参数传递,那么假如处理的函数就可以直接修改数组a里的值。
代码实例:(只是写个大概的逻辑,语法可能有错误)
main()
{
int a[]={1,2}
test(a)
printf(a[0]) //此处打印的值是3, 这就是引用传递。
}
public void test(int b[])
{
b[0]=3
}