【问题标题】:Using C# extension methods from managed C++/CLI使用托管 C++/CLI 中的 C# 扩展方法
【发布时间】:2010-11-23 21:29:05
【问题描述】:

如果我的术语有点不对,请原谅我。我对托管 C++/CLI 的了解非常有限。

我有一个 MFC 应用程序,它使用启用了 /clr 选项的 dll。此 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???

【问题讨论】:

    标签: c# .net .net-3.5 c++-cli unmanaged


    【解决方案1】:

    你必须像静态方法一样调用它:

    IPAddressExtensions::GetSubnetMask(address);
    

    “扩展”方法更多的是编译器技巧,而不是 CLR 中的差异。

    【讨论】:

    • @Reed Copsey:首先,谢谢!其次,是否有编写托管 C++ 代码的良好在线教程?语法现在让我无法理解,但我需要尽快掌握它。再次感谢。
    • 我不知道有什么好的在线教程,但对于那些仍然感兴趣的人,我推荐 Manning 出版的 Nishant Sivakumar 的“C++/CLI In Action”。
    • 这是上述书籍的亚马逊链接:amazon.com/CLI-Action-Manning-Nishant-Sivakumar/dp/1932394818
    • @MattDavis 我遇到了同样的问题,但是,我已经使用这本电子书Microsoft Visual C++/CLI Step by Step 清除了 C++/CLI 的基本基础。希望!它会帮助你。并感谢 Per Lundberg 推荐一本好的电子书
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多