我想在 C# 应用程序中使用rasterbar libtorrent 。它是用非托管 C++ 编写的。
我是使用 DLL 的新手,在网上找到了这篇文章:如何编组 C++ 类
它描述了无法直接编组/调用 C++ 类,您必须在 C(或托管 C++)中编写桥接器才能在托管 C# 代码中使用该库。
这篇文章来自 2007 年,我想知道现在是否有更好的解决方案来使用 C++ DLL。我正在寻找也适用于 Mono 平台的解决方案。libtorrent
是跨平台的,所以应该可以。
我想在 C# 应用程序中使用rasterbar libtorrent 。它是用非托管 C++ 编写的。
我是使用 DLL 的新手,在网上找到了这篇文章:如何编组 C++ 类
它描述了无法直接编组/调用 C++ 类,您必须在 C(或托管 C++)中编写桥接器才能在托管 C# 代码中使用该库。
这篇文章来自 2007 年,我想知道现在是否有更好的解决方案来使用 C++ DLL。我正在寻找也适用于 Mono 平台的解决方案。libtorrent
是跨平台的,所以应该可以。
首先,您应该为 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 包装它的方法并在整个项目中使用包装器。