求解是什么原因导致的?怎么改才能显示字符串?

关键代码:
DLL: 
extern char *AddStringX(char *a) 

return a;
}
————————————————————————
Ruby调用:
require 'Win32API'
def addStringX(a)
return Win32API.new('DemoDLL','AddStringX','p','p').call(a)
end
print addStringX("Test") #显示的是内存地址,无法显示字符串
__________________________________________________

第二个问题,求指点:
DLL编程如何引用需要的DLL或部分函数?
比如引用user32.dll的部分函数,写在什么地方?
于是跟此相关的问题:
某编译前的DLL工程,整个工程搜索"user32"没有找到,但是编译后却神奇地引用它了,求解!

人到中年有点甜
浏览 66回答 2
2回答

慕雪6442864

Win32API 应该要用stdcall

桃花长相依

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给的代码太少了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby