Ответ 1
Вам нужно просто называть его как статический метод:
IPAddressExtensions::GetSubnetMask(address);
Метод расширения является скорее компилятором, чем различием в CLR.
Простите меня, если моя терминология немного не работает. Мои знания об управляемом С++/CLI очень ограничены.
У меня есть приложение MFC, которое использует DLL с включенной опцией /clr. Эта DLL использует пару DLL С# для связи с сервером с использованием WCF. По большей части это прекрасно работает.
В одной из библиотек С# я добавил метод расширения в класс System.Net.IPAddress, который будет извлекать маску подсети для объекта IPAddress (используя класс UnicastIPAddressInformation и его IPv4Mask). Метод расширения отлично работает на стороне С#, но я не могу понять, как его использовать в управляемом коде С++/CLI.
Во-первых, возможно ли это? Если да, то как выглядит синтаксис на управляемой стороне С++/CLI? Должен ли я использовать параметр /clr: pure для этого?
Вот пример метода расширения:
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???
Вам нужно просто называть его как статический метод:
IPAddressExtensions::GetSubnetMask(address);
Метод расширения является скорее компилятором, чем различием в CLR.