递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2813|回复: 3
打印 上一主题 下一主题

[视窗] 获取MAC的API在火山PC运行报错,怎么解决字节数组传址?

[复制链接]

5

主题

33

帖子

329

积分

中级会员

Rank: 3Rank: 3

积分
329
跳转到指定楼层
楼主
发表于 2023-10-31 21:39:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 assume2013 于 2023-10-31 21:45 编辑


在火山PC的通信测试里没找到根据IP地址获取到MAC的方法,在易语言源码找到获取MAC的源码,都不懂怎么搬到火山?求大佬指点

一个简单的inet_addr  API在易语言声明如下:

运行正常,而我在火山PC声明如下:

运行却报错, 不懂为什么报错?

还如一个函数API在易语言声明如下:

我在火山这样声明:


对于这样的字节型数组,火山PC应该怎么传址?

易语言的获取MAC方法调用如下图:


这就是根据IP获取方法,在火山PC怎么实现,非常多谢各位大佬。



回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
沙发
发表于 2023-11-1 20:52:36 | 只看该作者
本帖最后由 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>)
}

评分

参与人数 1金钱 +1 收起 理由
yuangao + 1 很给力!

查看全部评分

回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40529
板凳
发表于 2023-11-1 22:05:06 | 只看该作者
火山里面表格调用dll不能直接用文本型,因为不通用。。火山的文本型是自己包装的。需要走变整数,通过指针获取。。

可以简单参考一下这个:https://doc.voldp.com/e_To_vol/structure.html#DLL   介绍了一点点文本型的使用。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

15

主题

336

帖子

1732

积分

金牌会员

接单Q:413795326

Rank: 6Rank: 6

积分
1732
QQ
地板
发表于 2023-11-2 00:56:57 | 只看该作者
创世魂 发表于 2023-11-1 22:05
火山里面表格调用dll不能直接用文本型,因为不通用。。火山的文本型是自己包装的。需要走变整数,通过指针 ...

但是看完文档感觉更麻烦了:噜阿噜

(在火山中DLL命令的定义更加灵活,随便建立一个方法都可以用来表示一个DLL命令。)
(\__/)
( •ᴗ•)
/> 软件 小程序 APP POST 脚本 建站 QQ:413795326
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 04:28 , Processed in 0.086025 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表