Использование методов расширения C # из управляемого C ++ / CLI - PullRequest
10 голосов
/ 29 августа 2009

Простите, если моя терминология немного не в порядке. Мои знания по управляемому C ++ / CLI очень ограничены.

У меня есть приложение MFC, которое использует dll с включенной опцией / clr. Эта библиотека использует пару библиотек C # для связи с сервером с использованием WCF. По большей части это работает нормально.

В одной из библиотек C # я добавил метод расширения в класс System.Net.IPAddress, который будет извлекать маску подсети для объекта IPAddress (используя класс UnicastIPAddressInformation и его IPv4Mask). Метод расширения прекрасно работает на стороне C #, но я не могу понять, как использовать его в управляемом коде C ++ / CLI.

Во-первых, это вообще возможно? Если да, то как выглядит синтаксис на стороне управляемого C ++ / 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);
    }
}

Как мне использовать этот метод расширения в моем управляемом коде C ++, если это вообще возможно?

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

1 Ответ

14 голосов
/ 29 августа 2009

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

IPAddressExtensions::GetSubnetMask(address);

Метод «расширения» - это скорее трюк с компилятором, чем разница в CLR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...