###質問内容
C++/CLIで「C++(アンマネージ)、C#、VB」で参照できるCOMを作成する方法をご教示いただけませんでしょうか。
※ 関数およびクラス両方COM公開したいと考えております。
###余談
C++/CLIを使用しており、COM公開をしたいと考えております。C++/CLIを使用するのは初めてです。
C++/CLIを使用する理由は、C#のdllを使用するためです。
質問は、漠然とした内容で申し訳ございませんが、上記の通りです。
C++/CLIについての資料が少ないという点もありますが、自分自身が
COMについてや他一般的な情報についての知見がほぼないということ
が原因で、C++/CLIでCOM公開する方法を自力で調べることができておりません。
下記サイトを見て、COMについて少しは理解できたつもりでいたのですが、
C#などの.Netプログラミングでは勝手が違う?ようで、タイプライブラリ?や
アセンブリの指定?などあるようでして、、、C++でもある???勉強中です。
[連載! とことん VC++] 第 2 回 COM 再入門 ~ COM オブジェクトの基本的実装 ~
https://code.msdn.microsoft.com/VisualC-dbc36ad9/
それでも、C#などでは"COM登録"、"COM公開"などで調べると方法はすぐに
出てくるので、理屈はまだ理解できておりませんが、、、なんとかやり方だけ
はすぐに分かります。
サンプルなど、どこかに転がってはいないものでしょうか。
###確認したこと
- C++(アンマネージ)と同じような手順でCOM登録
下記サイトのように、C++(アンマネージ)でするようなCOM登録を行うと、
CoInitializeEx(),CoCreateInstance()で、C++(アンマネージ)から参照
できることは確認できました。
※ C++/CLIでは、DLLエントリポイントなるDllMain()がないため、DllMain()の実装はしていないです。
[連載! とことん VC++] 第 2 回 COM 再入門 ~ COM オブジェクトの基本的実装 ~
https://code.msdn.microsoft.com/VisualC-dbc36ad9/
ただ、これではC#やVBから呼び出せません。
C#やVBからCOMコンポーネントを使用する場合、[参照の追加]-[COM]から、
使用したいCOMをプロジェクトの参照に追加する必要があると認識して
おります。ですが、上記のようなCOM登録の方法では、[参照の追加]-[COM]
の一覧の中に登録したCOMの情報は表示されません。
他のCOM登録されているDLLのレジストリを確認すると、以下のキーが登録
されていることを確認できたので、同様に追加したところ、
[参照の追加]-[COM]の一覧の中に作成したDLLが表示されることを確認できました。
※ (Clsid)と(TypeLibid)には実際のGUIDが入っていました。 HKEY_CLASSES_ROOT\CLSID\{(Clsid)}\TypeID @="(TypeLibid)" HKEY_CLASSES_ROOT\TypeLib\{(TypeLibid)} HKEY_CLASSES_ROOT\TypeLib\{(TypeLibid)}\1.0 HKEY_CLASSES_ROOT\TypeLib\{(TypeLibid)}\1.0\0 HKEY_CLASSES_ROOT\TypeLib\{(TypeLibid)}\1.0\0\win64 @="(dllのフルパス)" HKEY_CLASSES_ROOT\TypeLib\{TypeLibid}\1.0\FLAGS @="0" HKEY_CLASSES_ROOT\TypeLib\{TypeLibid}\1.0\HELPDIR @="(dllのパス)"
なお、実際に追加しようとすると、当該DLLはCOMコンポーネントではない旨の
エラーが発生し、追加できません。
- C#っぽい?COM登録
下記URLは、私が望むものと一致していると考え、実際に試してみたの
ですが、「regasmにてDLLを登録」という部分で有効な.NETアセンブリ
ではないと怒られてつまずきました。ここがCOMについて知らないと
いけないんだろうなと勉強中です。
てんどん日記 [C++/CLI] COMのライブラリ公開
http://tendonmeister.at.webry.info/200902/article_1.html

回答3件
あなたの回答
tips
プレビュー