使用扩展方法从托管的C++/CLI中调用C#扩展方法

11

如果我的用词有误请谅解,我对托管的C++/CLI了解很有限。

我有一个使用启用/clr选项的dll的MFC应用程序。这个dll使用了几个C# dll来使用WCF与服务器通信。在大多数情况下,这个方法是有效的。

在其中一个C# dll中,我添加了一个扩展方法到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个回答

16

你只需要像调用静态方法一样调用它:

IPAddressExtensions::GetSubnetMask(address);

"extension"方法更像是编译器的技巧,而不是CLR中的区别。


@Reed Copsey: 首先,非常感谢!其次,有没有适合编写托管C++代码的好的在线教程?我现在无法理解其语法,但我需要尽快熟练掌握它。再次感谢您。 - Matt Davis
我不知道有什么好的在线教程,但对于那些仍然感兴趣的人,我推荐由Manning出版的Nishant Sivakumar所著的《C++/CLI In Action》。 - jschroedl
这是提到的书的亚马逊链接:http://www.amazon.com/CLI-Action-Manning-Nishant-Sivakumar/dp/1932394818 - Per Lundberg
@MattDavis 我遇到了同样的问题,但是我通过这本电子书 Microsoft Visual C++/CLI Step by Step 清晰理解了我C++/CLI的基础知识。希望它能对你有所帮助。同时感谢 Per Lundberg 推荐了一本好的电子书。 - Kasim Rangwala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接