1

我想在 C# 应用程序中使用rasterbar libtorrent 。它是用非托管 C++ 编写的。

我是使用 DLL 的新手,在网上找到了这篇文章:如何编组 C++ 类

它描述了无法直接编组/调用 C++ 类,您必须在 C(或托管 C++)中编写桥接器才能在托管 C# 代码中使用该库。

这篇文章来自 2007 年,我想知道现在是否有更好的解决方案来使用 C++ DLL。我正在寻找也适用于 Mono 平台的解决方案。libtorrent是跨平台的,所以应该可以。

4

1 回答 1

2

首先,您应该为 Windows 构建libtorrent dll。这里的这个链接可以帮助你。然后,为了从托管代码(在本例中为 C#)调用非托管代码(在本例中为 C++),您可以使用Platform Invocation Services (PInvoke)。它允许托管代码调用在 DLL 中实现的非托管函数。例如看看这个 MSDN 代码

// PInvokeTest.cs
using System;
using System.Runtime.InteropServices;

class PlatformInvokeTest
{
    [DllImport("msvcrt.dll")]
    public static extern int puts(string c);
    [DllImport("msvcrt.dll")]
    internal static extern int _flushall();

    public static void Main() 
    {
        puts("Test");
        _flushall();
    }
}

更好的方法是在 C# 中为libtorrent dll 编写一个包装器类,使用 PInvoke 包装它的方法并在整个项目中使用包装器。

于 2012-05-29T07:47:41.703 回答