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.