none
COM形式のDLLの参照が追加できない RRS feed

  • 質問

  • Visual Studio 2019 Communityで、COM形式のDLLを利用し
    C++でコンソールアプリケーション(.exe)を開発したいと考えています。

    そのため、プロジェクトにDLLの参照を追加したいのですが、
    プロジェクトの参照>参照の追加で参照を追加しようとしても、
    「プロジェクト」と「共有プロジェクト」しかタブが表示されず、
    「COM」タブが表示されないため追加できません。
    (DLLの手元のガイドはもっと古いバージョンのVSに対しての手順でしたが、
     このように構成せよ、とあったように読み取れたため)

    この事象はC++の「Windows デスクトップ ウィザード」で作成したプロジェクトで発生していますが、
    使い方ガイドの「参照マネージャーを使用して参照を追加または削除する」というページを確認したところ、
    「プロジェクトの種類が COM をサポートしていない場合、[参照マネージャー] ダイアログ ボックスに [COM] タブは表示されません。」
    とあるものの、COMをサポートするプロジェクトがわかりません。

    そもそも参照に追加するという方法が発想として間違っているのでしょうか。
    もしくは最近のVSでは対応していない、ということがあるのでしょうか。

    COM形式のDLLをC++で利用する方法について、どなたか対処方法を教えていただけないでしょうか。
    参照機能を使わないでごりごり書けばいいじゃん、というご意見もあるのかもしれませんが、
    その場合には読み込みのコード例を教えていただきたく。

    どうぞよろしくお願いします。
    2019年9月17日 14:50

回答

すべての返信

  • 参照設定で COM のタブが現れるのは、C++/CLI という言語を使った .NET アプリケーション開発の場合です。
    純粋な C++ で開発する場合には使えません。

    C++ では #import ディレクティブ を使ってタイプライブラリをインポートして開発します。
    こちらの方が作る方と使う方、両方とも C++ の例を記載されています ので参考になりそうです。

    • 回答としてマーク yuuuuukapine 2019年9月19日 10:07
    2019年9月17日 20:57
    モデレータ
  • 可能であれば参照したいDLL名を提示していただけるとアドバイスが変わる可能性があります。

    COM形式のDLLは実行時に参照されるのは確かにそうですが、開発時にはIDLやTLBを参照しDLLそれ自体は参照しないため、Azuleanさんが回答で挙げられた方法で解決可能かはわかりません。

    2019年9月17日 22:48
  • Azuleanさん

    ありがとうございます。

    >参照設定で COM のタブが現れるのは、C++/CLI という言語を使った .NET アプリケーション開発の場合です。

    なるほど、そうであれば使い方ガイドにはっきり書いておいてほしいものですが。。
    この世界の開発者にとっては常識なんでしょうか。。
    (門外漢が調べながらやっているので勝手がわからず…)

    .NETの世界でよいなら、C#やVB.NETでも参照設定できるのでしょうか。
    参照設定を利用せずにコードをごりごり書いて使うのは骨が折れそうな気がしますし、
    C++/CLIの習熟を目指してもよいのかもしれませんが、
    C#などで開発できないかについても考慮を入れたいと思います。

    COMの理解も足りていないことも痛感しましたので、
    いただいたリンクなどを参考にしながら進めてみたいと思います。
    2019年9月18日 10:36
  • 佐祐理さん

    ありがとうございます。

    >可能であれば参照したいDLL名を提示していただけるとアドバイスが変わる可能性があります。

    参照したいDLLはサードパーティー製のものなので、
    細かい話は開発ベンダーに聞く話と考えていました。

    あわせて伺う方がいいとは思いましたが、
    インターネット上で提示して聞いていい代物かわからず、
    まずは自分で調べてみようと思います。
    2019年9月18日 10:38
  • なるほど、そうであれば使い方ガイドにはっきり書いておいてほしいものですが。。
    この世界の開発者にとっては常識なんでしょうか。。

    あのダイアログは C# などの .NET 系の開発環境の搭載開始以降に実装されたものであることと、C++ ネイティブで Windows アプリケーションを進める人口の相対的な少なさから、配慮は足りないかもしれませんね。

    .NETの世界でよいなら、C#やVB.NETでも参照設定できるのでしょうか。
    参照設定を利用せずにコードをごりごり書いて使うのは骨が折れそうな気がしますし、
    C++/CLIの習熟を目指してもよいのかもしれませんが、
    C#などで開発できないかについても考慮を入れたいと思います。

    GUI のあるアプリケーション開発を目指していて、かつ C++ の経験が少ない、あるいは C++ で GUI 開発経験がない状態で、言語にこだわりがないのであれば、C# の方がお手軽だとは思います。
    C++/CLI は新たなに学ぶ言語ではなく、C++ の資産をどうしても活用したい場合に限って使った方が良いです。Microsoft もそのように位置づけていることと、学習に使える媒体が少ないためです。

    C# や VB.NET では参照設定ダイアログで COM のタブはあります。
    ただ、すべての COM が現れるわけではないので、サードパーティーの COM の実装や提供方法次第かと思います。

    2019年9月18日 12:57
    モデレータ
  • Azuleanさん

    追加コメントありがとうございます!
    理解が深まりました。
    2019年9月18日 14:59
  • yuuuuukapineさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    本件、Azuleanさんより参考になる投稿が寄せられたようでなによりです。

    [回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
    同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年9月19日 2:19
    モデレータ
  • Harukaさん

    対応しました。
    よろしくお願いします。
    2019年9月19日 10:09