C++のCOMのコードをC#にもっていきたいときに、interfaceや構造体等の定義の参考にするもの

もくじ

https://tera1707.com/entry/2022/02/06/144447#COM

やりたいこと

COMでなにかをしないといけないときに、自分は

  • C++でまずCOMを使ってやりたいことができるか試す
  • それが出来たら、C#に直す
    • 必要なinterfaceや構造体などを、C++のヘッダーを見ながらC#で定義する
    • それらを使ってC#コードを書く

ということをするのだが、この必要なinterfaceや構造体などを、C#で定義するの部分がめんどくさいのと、よく「これでいいはずなのに、なにかエラーになってしまう」ということになる。

その時のよくやる対処方法のメモ。

やりかた

C++のヘッダーをみる

基本は、以前の記事に書いたように、C++のコードの中にあるintefaceや構造体の上でF12を押して、.hの中の定義を見て、一個一個手でC#に直していく。

※その時のやり方、ルールもその記事参照。

ただ手で直すと、なんだかうまく動かない、メモリアクセス違反になる、とかなんか変なことに良くなってしまう。

その時は、今のところ、下のようにするのが一番早いと思う。

OSSを参考にする

Win32APIをC#から叩きたいときは、pinvoke.netというサイトをよく参考にさせてもらっているので、COMの定義についてもそういうサイトがないかな?と思ったが、見つけられなかった。

色々見たところ、COMを使っていろいろするためのOSSgithub上に上がっていて、その中身を参考にさせてもらうのが一番わかりやすかった。

最近よく参考にしているのが下記。

https://github.com/dahall/vanara

このリポジトリの中で、調べたいinterfaceや構造体の名前を検索すれば出てくるので、それを見て勉強するのが一番やりやすい。