PowerBasic接收FreeBasic传送的字符串方法

本文探讨了在FreeBasic(FB)和PowerBasic(PB)之间进行函数调用时遇到的问题,重点在于两者对于string类型的处理差异。原来,FB的string类型在传递时只能按地址传递,而不能像PB那样按值传递。通过修改PB的导入声明,将接收类型从string改为DWORD并使用指针来获取字符串,最终成功解决了跨语言字符串传递的难题。
摘要由CSDN通过智能技术生成

想当然认为PB的string类型与FB的string相同,结果按值接收却总是为空。

'FreeBasic 函数输出一个字符串
Public function getstr stdcall Alias "getstr"() as string Export
   function = "hello!!"
end function

'在PowerBasic中引用并接收这个字符串
DECLARE FUNCTION getstr LIB "test.dll" STDCALL ALIAS "getstr@0"() AS string

MsgBox getstr()

'实际总是返回空值 

表面上好像看上去没有问题,但为何无法接收到FB传递过来的字符串"hello!!"呢?

再次查看了FB对于string类型的说明,这才发现它是一个字节数组,在传递过程中只能按地址传递,而不像PB可以按值传递。类似PB中的ASCIIZ类型。

所以在PB中引用定义导入的类型就不能使用string作为接收类型了,而应该用dword作为地址接收类型。重新测试后成功接收到FB传递的字符串。

'FreeBasic导出函数,输出一个字符串
Public function getstr stdcall Alias "getstr"() as string Export
   function = "hello!!"
end function

'在PowerBasic中引用做如下调整
DECLARE FUNCTION getstr LIB "test.dll" STDCALL ALIAS "getstr@0"() AS DWORD

LOCAL pBuf AS ASCIIZ PTR

pBuf = getstr()

MSGBOX @@pBuf

'成功获取到FB传递的字符串 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值