Utilisation de méthodes d’extension C # à partir de C ++ / CLI géré

Pardonnez-moi si ma terminologie est un peu décalée. Ma connaissance du C ++ / CLI géré est très limitée.

J’ai une application MFC qui utilise une DLL avec l’option / clr activée. Cette dll utilise quelques dll C # pour communiquer avec un serveur utilisant WCF. Pour la plupart, cela fonctionne bien.

Dans l’une des dll C #, j’ai ajouté une méthode d’extension à la classe System.Net.IPAddress qui extraira le masque de sous-réseau de l’object IPAddress (à l’aide de la classe UnicastIPAddressInformation et de son masque IPv4). La méthode d’extension fonctionne très bien du côté C #, mais je ne peux pas comprendre comment l’utiliser dans le code géré C ++ / CLI.

Tout d’abord, est-ce même possible? Si tel est le cas, à quoi ressemble la syntaxe du côté de C ++ / CLI géré? Dois-je utiliser l’option / clr: pure pour que cela fonctionne?

Voici un exemple de la méthode d’extension:

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

Dans mon code C ++ géré, comment pourrais-je utiliser cette méthode d’extension, si c’est possible?

 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??? 

Vous devez simplement l’appeler comme une méthode statique:

 IPAddressExtensions::GetSubnetMask(address); 

La méthode “extension” est plus une astuce du compilateur qu’une différence dans le CLR.