關鍵代碼: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 關注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消