1
cwaken 2022-03-07 08:11:33 +08:00 via iPhone
这东西是单独分开写的呀
|
2
rv54ntjwfm3ug8 OP @cwaken #1 有办法一套代码兼容 Windows/Linux/macOS 么
|
3
msg7086 2022-03-07 08:18:05 +08:00 1
你得去看系统调用,每个系统的系统调用不一样的,你得问内核拿到网络栈的信息。
Windows 下应该是用 GetAdaptersAddresses 系统调用吧。 如果要同时在多个操作系统下工作,那也简单,写一个库,根据平台编译出调用不同的系统调用的代码就行了。 至于有没有现成的库我就不知道了。 |
5
yolee599 2022-03-07 08:50:07 +08:00 via Android
有一个功能叫“条件编译”,只能分不同的平台来分别编译了
|
6
elfive 2022-03-07 09:00:11 +08:00 via iPhone
系统 API➕条件编译
|
7
hhjuteman 2022-03-07 09:23:11 +08:00
每个平台不一样,qt 好像没有统一 api 。
https://github.com/paullouisageneau/libjuice/blob/62b88fb776b1a79638c683192744f3ec0b430c6f/src/udp.c#L428 贴了个大概的参考,可以看看 |
8
3dwelcome 2022-03-07 09:39:23 +08:00
"Windows 下我还尝试过解析 ipconfig 输出"
我也是用这种方法,比自己去调用 API 简单多了。 只要做中文和英文解析,就足够了。 |
9
krixaar 2022-03-07 09:52:41 +08:00 1
@3dwelcome #8 我之前为了偷懒先 chcp 65001 然后输出就变英文了,不知道其它语言里是不是这样,至少简中 win10 可以
|
11
nieyujiang 2022-03-07 10:03:38 +08:00 via iPhone
@theklf4 #2 没有,但凡是跨平台的东西,不存在一套代码适配所有平台。上层调用可以统一,底层的实现一个系统一个样。甚至机制和原理都不一样。咋统一。🐶
|
12
ysc3839 2022-03-07 10:08:50 +08:00 via Android
最佳实践是去找各系统官方的 sample 代码。比如前面有人提到的 GetAdaptersAddresses ,微软文档里就有代码 https://docs.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses
不知道楼主怎么得出标题所述的结论的 |
13
learningman 2022-03-07 12:30:11 +08:00
要适配多系统,只能#ifdef 一个一个写了
|