11

Brotli を利用したいのですが、Python と C++ には詳しくありません。

誰かがそれを Windows .exe にコンパイルしたことは知っています。しかし、それを DLL や .NET アプリが参照できるものにラップするにはどうすればよいでしょうか? IronPython があることは知っていますが、すべてのソース ファイルを IronPython プロジェクトに取り込み、Brotli API を呼び出してそれらを公開する .NET アダプターを作成するだけですか? しかし、実際には、Brotli API が Python なのか C++ なのかさえわかりません..

を見るとtools/bro.cc、「エントリ」メソッドがencode.cおよび、、メソッドdecode.cとして定義されているように見えます。したがって、DLL は C++ クラスからコンパイルできると思います。BrotliCompress()BrotliDecompressBuffer()BrotliDecompressStream()

4

3 に答える 3

13

Python の必要性を回避するために、元の brotli ソース ( https://github.com/smourier/brotli ) をフォークし、.NET で使用できる Windows DLL バージョンを作成しました。2 つのプロジェクトを含む "WinBrotli" Visual Studio 2015 ソリューションを含むディレクトリを追加しました。

  • WinBrotli : 元の変更されていない C/C++ brotli コードを含む Windows DLL (x86 および x64)。
  • Brotli : WinBrotli の P/Invoke 相互運用コードを含む、C# で記述された Windows コンソール アプリケーション (任意の Cpu)。

Winbrotli DLL を再利用するには、WinBrotli.x64.dll と WinBrotli.x86.dll (ビルド済みのリリース バージョンはWinBrotli/binariesフォルダーにあります) を .NET アプリケーションの横にコピーし、BrotliCompression.csファイルを C# に組み込みます。プロジェクトを作成します (または、C# がお気に入りの言語でない場合は、VB または別の言語に移植します)。相互運用コードは、現在のプロセスのビット数 (X86 または X64) に対応する適切な DLL を自動的に選択します。

それが完了したら、それを使用するのは非常に簡単です (入力と出力は、ファイル パスまたは標準の .NET ストリームにすることができます)。

        // compress
        BrotliCompression.Compress(input, output);

        // decompress
        BrotliCompression.Decompress(input, output);

WinBrotli を作成するために、私が行ったことは次のとおりです (他の Visual Studio バージョンを使用したい人向け)。

  • 標準 DLL プロジェクトを作成し、プリコンパイル済みヘッダーを削除しました
  • すべてのエンコーダーとデコーダーの元の brotli C/C++ ファイルが含まれています (そこには何も変更されていないため、必要に応じて元のファイルを更新できます)
  • MSVCRT への依存関係を削除するようにプロジェクトを構成しました (そのため、他の DLL を展開する必要はありません)。
  • 4146 警告を無効にしました (そうしないとコンパイルできません)
  • 特別なことを何もしない非常に標準的な dllmain.cpp ファイルを追加しました
  • brotli 圧縮および圧縮解除コードを外部の Windows ワールドに公開する WinBrotli.cpp ファイルを追加しました (非常に薄いアダプテーション レイヤーを使用するため、.NET での相互運用が容易になります)。
  • 4 つの関数をエクスポートする WinBrotli.def ファイルを追加
于 2016-05-30T20:46:29.450 に答える