2009-08-28 11 views
10

私の用語がちょっと残っていると私に許してください。私のC++/CLIの知識は非常に限られています。管理されたC++/CLIからのC#拡張メソッドの使用

/clrオプションを有効にしてdllを使用するMFCアプリケーションがあります。このDLLは、WCFを使用するサーバーと通信するために、C#dllのカップルを使用します。ほとんどの場合、これは正常に動作します。

C#DLLの1つでは、(UnicastIPAddressInformationクラスとそのIPv4マスクを使用して)IPAddressオブジェクトのサブネットマスクを取得する拡張メソッドをSystem.Net.IPAddressクラスに追加しました。拡張メソッドはC#側でうまく機能しますが、管理されたC++/CLIコードでそのメソッドを使用する方法を理解することはできません。

まず、これも可能ですか?もしそうなら、管理されたC++/CLI側で構文はどのように見えますか?これを動作させるには/ clr:pureオプションを使用する必要がありますか?私は、この拡張メソッドを使用する方法、それも可能だ場合、私のマネージドC++コードで

using System.Net; 
using System.Net.NetworkInformation; 
public static class IPAddressExtensions 
{ 
    public static IPAddress GetSubnetMask(this IPAddress address) 
    { 
     UnicastIPAddressInformation addressInfo = address.GetAddressInformation(); // elided 
     return ((addressInfo != null) ? addressInfo.IPv4Mask : null); 
    } 
} 

は、ここでの拡張メソッドの例ですか?

unsigned long bytes= 0x010000FF; // example address - 127.0.0.1 
IPAddress^ address = gcnew IPAddress(BitConverter::GetBytes(bytes)); 
IPAddress^ subnet = address->GetSubnetMask(); // how do I do this??? 

答えて

13

あなただけの静的メソッドのようにそれを呼び出す必要があります:「拡張子」の方法は、CLRの違いよりも、コンパイラのトリックの詳細です

IPAddressExtensions::GetSubnetMask(address); 

+0

@Reed Copsey:まずは、ありがとう!次に、マネージドC++コードを書くためのオンラインチュートリアルがありますか?構文は今私をエスケープするが、私は急いでそれをうまく処理する必要がある。再度、感謝します。 –

+0

私は良いオンラインチュートリアルがわかりませんが、興味のある方はマニングが発行したNishant Sivakumarの "C++/CLI In Action"をお勧めします。 – jschroedl

+0

上記の本へのAmazonリンクがあります:http://www.amazon.com/CLI-Action-Manning-Nishant-Sivakumar/dp/1932394818 –

関連する問題