亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

人到中年有點甜 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 關注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號