d3d11.hd3d11.d に変換したいのでやる。

以前、少し手を出したときの記事。

この時は手作業で d3d11.h をD言語向けに編集していたのだけど、 プログラムで自動変換します。

環境整備

Windows10(64bit)

  • llvmインストール(32bit)
  • python36-32
  • pip install clang

TranslationUnit

  • typedef
  • enum
  • struct/union
  • function

プリプロセッサー情報を得る

  • include
  • define

ComのIIDを得る

  • unexposed

D向けに出力

  • extern Windows
  • public import
  • &* に置換
  • interfaceに対するポインタの *をひとつ減らす

あとは愚直に粛々と前に進める

python clang は強力

こいつがあると、C/C++のヘッダから各言語向けのバインディングを作成するなどの作業を半自動化できて便利。 例えば、

GitHub - ousttrue/UnityCairo: DllImport for cairo
DllImport for cairo. Contribute to ousttrue/UnityCairo development by creating an account on GitHub.
GitHub - ousttrue/UnityCairo: DllImport for cairo favicon https://github.com/ousttrue/UnityCairo
GitHub - ousttrue/UnityCairo: DllImport for cairo

元々、

BulletSharp
BulletSharp : .NET wrapper for the Bullet physics library
BulletSharp favicon http://andrestraks.github.io/BulletSharp/

が clang で bullet のヘッダーを変換しているぽかったので、そこから調べた。

できたもの

なんとなく動くものができた。

GitHub - ousttrue/pycpptool: tool for cpp source manipulation 🐲
tool for cpp source manipulation 🐲. Contribute to ousttrue/pycpptool development by creating an account on GitHub.
GitHub - ousttrue/pycpptool: tool for cpp source manipulation 🐲 favicon https://github.com/ousttrue/pycpptool
GitHub - ousttrue/pycpptool: tool for cpp source manipulation 🐲