Подтвердить что ты не робот

Использование методов расширения С# из управляемого С++/CLI

Простите меня, если моя терминология немного не работает. Мои знания об управляемом С++/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???
4b9b3361

Ответ 1

Вам нужно просто называть его как статический метод:

IPAddressExtensions::GetSubnetMask(address);

Метод расширения является скорее компилятором, чем различием в CLR.