为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2023-03-15 22:18:15
关键代码: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 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

Win32API 应该要用stdcall

查看完整回答
反对 回复 2023-03-18
?
桃花长相依

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给的代码太少了。

查看完整回答
反对 回复 2023-03-18
  • 2 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信