递归火山软件开发平台
标题:
获取MAC的API在火山PC运行报错,怎么解决字节数组传址?
[打印本页]
作者:
assume2013
时间:
2023-10-31 21:39
标题:
获取MAC的API在火山PC运行报错,怎么解决字节数组传址?
本帖最后由 assume2013 于 2023-10-31 21:45 编辑
在火山PC的通信测试里没找到根据IP地址获取到MAC的方法,在易语言源码找到获取MAC的源码,都不懂怎么搬到火山?求大佬指点
一个简单的inet_addr API在易语言声明如下:
运行正常,而我在火山PC声明如下:
运行却报错, 不懂为什么报错?
还如一个函数API在易语言声明如下:
我在火山这样声明:
对于这样的字节型数组,火山PC应该怎么传址?
易语言的获取MAC方法调用如下图:
这就是根据IP获取方法,在火山PC怎么实现,非常多谢各位大佬。
作者:
Xelloss0618
时间:
2023-11-1 20:52
本帖最后由 Xelloss0618 于 2023-11-1 22:54 编辑
<火山程序 类型 = "通常" 版本 = 1 />
方法 IP取MAC地址 <公开 静态 类型 = 文本型 注释 = "表格DLL写法" 折叠>
参数 IP地址 <类型 = 文本型>
{
变量 MacAddr <类型 = "字节 [8]">
变量 PhyAddrLen <类型 = 整数>
变量 Mac <类型 = 文本型>
PhyAddrLen = 6
如果 (SendARP (inet_addr (文本到多字节 (IP地址).取字节集指针 ()), 0, 取数组变量地址 (MacAddr), 取变量地址 (PhyAddrLen)) == 0)
{
计次循环 (PhyAddrLen)
{
如果 (取循环索引 () == PhyAddrLen - 1)
{
加入格式文本 (Mac, "%.2X", 无符号字节到整数 (MacAddr [取循环索引 ()]))
}
否则
{
加入格式文本 (Mac, "%.2X-", 无符号字节到整数 (MacAddr [取循环索引 ()]))
}
}
}
返回 (Mac)
}
方法 IP取MAC地址2 <公开 静态 类型 = 文本型 注释 = "嵌入式封装API写法" 折叠>
参数 IP地址 <类型 = 文本型>
{
变量 MacAddr <类型 = "字节 [8]">
变量 PhyAddrLen <类型 = 整数>
变量 Mac <类型 = 文本型>
PhyAddrLen = 6
如果 (SendARP2 (inet_addr2 (IP地址), 0, MacAddr, PhyAddrLen) == 0)
{
计次循环 (PhyAddrLen)
{
如果 (取循环索引 () == PhyAddrLen - 1)
{
加入格式文本 (Mac, "%.2X", 无符号字节到整数 (MacAddr [取循环索引 ()]))
}
否则
{
加入格式文本 (Mac, "%.2X-", 无符号字节到整数 (MacAddr [取循环索引 ()]))
}
}
}
返回 (Mac)
}
方法 inet_addr <公开 静态 类型 = 整数 折叠 @输出名 = "inet_addr" @视窗.输入 = "Ws2_32.dll">
参数 cp <类型 = 变整数 注释 = "这个API只接受ANSI编码文本,不能用文本型">
方法 SendARP <公开 静态 类型 = 整数 折叠 @输出名 = "SendARP" @视窗.输入 = "Iphlpapi.dll">
参数 DestIP <类型 = 整数>
参数 SrcIP <类型 = 整数 @默认值 = 0>
参数 pMacAddr <类型 = 变整数 注释 = "至少8个字节的指针">
参数 PhyAddrLen <类型 = 变整数 注释 = "整数变量指针">
方法 inet_addr2 <公开 静态 类型 = 整数 注释 = "嵌入式封装" 折叠 @嵌入式方法 = "">
参数 cp <类型 = 文本型>
{
@ (INT)::inet_addr (GetMbsText(@<cp>.GetText(), CVolMem(), NULL))
}
方法 SendARP2 <公开 静态 类型 = 整数 注释 = "嵌入式封装" 折叠 @嵌入式方法 = "" @视窗.外部头文件 = "iphlpapi.h"
@视窗.外部库 = "Iphlpapi.lib">
参数 DestIP <类型 = 整数>
参数 SrcIP <类型 = 整数 @默认值 = 0>
参数 pMacAddr <类型 = "字节 []" 注释 = "至少8个字节" @需求类型 = 可写入变量>
参数 PhyAddrLen <类型 = 整数 注释 = "必须提供整数变量" @需求类型 = 可写入变量>
{
@ (INT)::SendARP((IPAddr)@<DestIP>, (IPAddr)@<SrcIP>, &@<pMacAddr>, (PULONG)&@<PhyAddrLen>)
}
作者:
创世魂
时间:
2023-11-1 22:05
火山里面表格调用dll不能直接用文本型,因为不通用。。火山的文本型是自己包装的。需要走变整数,通过指针获取。。
可以简单参考一下这个:
https://doc.voldp.com/e_To_vol/structure.html#DLL
介绍了一点点文本型的使用。
作者:
飞丶宇
时间:
2023-11-2 00:56
创世魂 发表于 2023-11-1 22:05
火山里面表格调用dll不能直接用文本型,因为不通用。。火山的文本型是自己包装的。需要走变整数,通过指针 ...
但是看完文档感觉更麻烦了:噜阿噜
(在火山中DLL命令的定义更加灵活,随便建立一个方法都可以用来表示一个DLL命令。)
欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/)
Powered by Discuz! X3.4