gpt4 book ai didi

.net - 在 .Net Core 2.0 上获取网络成本的最佳方法

转载 作者:行者123 更新时间:2023-12-04 20:31:02 25 4
gpt4 key购买 nike

有没有办法找出 .Net Core 2.0 上的网络成本?
这就是我在 C++ 代码中获取网络成本的方式:

hr = pNetworkCostManager->GetCost(&dwCost, NULL);
if (hr == S_OK) {
switch (dwCost) {
case NLM_CONNECTION_COST_UNRESTRICTED:
case NLM_CONNECTION_COST_FIXED:
case NLM_CONNECTION_COST_VARIABLE:
case NLM_CONNECTION_COST_OVERDATALIMIT:
case NLM_CONNECTION_COST_CONGESTED:
case NLM_CONNECTION_COST_ROAMING:
case NLM_CONNECTION_COST_APPROACHINGDATALIMIT:
case NLM_CONNECTION_COST_UNKNOWN:
}
}

.Net Core (2.0) 拥有的一件事是 NetworkInterfaceType ( https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.networkinterfacetype?view=netcore-1.0)

根据 NetworkInterfaceType,我可以查看它是否有 wifi、网络或移动连接,但这不会转化为成本。
有没有办法找出 .Net Core 2.0 上的网络成本?

最佳答案

调用GetCost您将不得不使用 COM 接口(interface)。如果您需要准确地进行此调用,即通过 NULL而不是 IP 地址到 GetCost ,那么您将不得不自己定义 COM 接口(interface)以满足您的需求,例如像这样:

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[ComImport, Guid("DCB00C01-570F-4A9B-8D69-199FDBA5723B"), ClassInterface(ClassInterfaceType.None)]
public class NetworkListManager : INetworkCostManager
{
[MethodImpl(MethodImplOptions.InternalCall)]
public virtual extern void GetCost(out uint pCost, [In] IntPtr pDestIPAddr);
}


[ComImport, Guid("DCB00008-570F-4A9B-8D69-199FDBA5723B"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface INetworkCostManager
{
void GetCost(out uint pCost, [In] IntPtr pDestIPAddr);
}

然后您可以像这样获取成本信息:
new NetworkListManager().GetCost(out uint cost, IntPtr.Zero);

如果你没有通过 NULL的要求进入 GetCost您可以简单地添加对 COM 类型库“网络列表管理器 1.0 类型库”的引用,将“嵌入互操作类型”设置为 falseuse those definitions .

关于.net - 在 .Net Core 2.0 上获取网络成本的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com