1

C# アプリケーションでrasterbar libtorrentを使用したいと考えています。アンマネージ C++ で書かれています。

私は DLL を使用するのが初めてで、この記事をオンラインで見つけました: How to Marshal a C++ Class

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 に答える