2017-09-20 20 views
5

.Net Core 2.0でネットワークコストを見つける方法はありますか?
これは私が私のC++のコードで、ネットワークコストを取得する方法である:.NETのコア(2.0)を持っていることを.Net Core 2.0でネットワークコストを得る最良の方法

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: 
    } 
} 

ことの一つは、NetworkInterfaceType(https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.networkinterfacetype?view=netcore-1.0

は、それならば、私は見ることができますNetworkInterfaceTypeに基づいていますWi-Fi、ネットワークまたはモバイル接続がありますが、それはコストに変換されません。
.Net Core 2.0のネットワークコストを調べる方法はありますか?

+0

C++のサンプルでは、​​ 'pNetworkCostManager'はどこから来たのですか? – Gimly

+0

@Gimly https://msdn.microsoft.com/en-us/library/windows/desktop/hh448257(v=vs.85).aspxオブジェクト – Mark

+0

メーター対無制限の使用を判断しようとしていますか?お金)?または、パフォーマンス(速度ビット/秒)を決定しようとしていますか? –

答えて

3

GetCostを呼び出すには、COMインターフェイスを使用する必要があります。この呼び出しを正確に行う必要がある場合、つまりGetCostにIPアドレスの代わりにNULLを渡す場合は、必要に応じてCOMインターフェイスを独自に定義する必要があります。このように:あなたはGetCostNULLを渡すの要件を持っていない場合は、単にCOMタイプへの参照を追加することができます

new NetworkListManager().GetCost(out uint cost, IntPtr.Zero); 

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); 
} 

次に、あなたは、このようなコスト情報を入手することができますライブラリ "ネットワークリストマネージャ1.0タイプライブラリ"、 "埋め込み相互運用型の種類"をfalseuse those definitionsに設定します。

関連する問題