C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■93192 / )  Re[4]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ まる (5回)-(2019/11/27(Wed) 01:12:00)
お世話になっております。投稿者のまるです。
確認が遅れてしまい大変失礼いたしました。皆さま、コメント頂きましてありがとうございます。大変勉強になります。
まだ理解が追い付いていない点が多々あるため、おかしいことを言っている点もあるかと思いますが、どうかご容赦いただけますと幸いです。

遅ればせながら順次返信させて頂きます。


No93146 (KOZ さん) に返信
> アウトプロセスの COM ラッパーを作れば良いのですが、では .NET でどう作るかというと
> 「Visual C++、Visual C#、または Visual Basic .NET を使用して、アウト プロセスの COM コンポーネントを開発する方法」
> https://support.microsoft.com/ja-jp/help/977996/how-to-develop-an-out-of-process-com-component-by-using-visual-c-visua
KOZ さん、真っ先にコメント頂きましてありがとうございます。また、URLもご紹介頂きましてありがとうございます。
仮面弁士さんのおっしゃられていたように、ご紹介いただいたページをもとにソースコードを探したところ、仮面弁士さんが見つけたものと同じページを見つけ、作業が進むことができました。ありがとうございました。
(見つけたソースコードの動作確認に手間取っていたら返信が遅れてしまいました。失礼いたしました。)


No93164 (とっちゃん さん) に返信
> 実際はもっといろいろ種類があるのですが、プログラム連携という部分で比較的導入しやすいものを2つ挙げておきます。
> 1. パイプ(pipe)
> 2. WCF(Windows Communication Foundation)
とっちゃん さん、コメント頂きましてありがとうございます。
COM以外にもこのような方法があるのですね。存在自体をあまり存じておりませんでしたため、大変勉強になります。ご紹介頂きましてありがとうございます。
まだ詳しい内容はみていないのですが、COM作成が現在難航しているため、ご紹介頂いたこれらも併せて検討させて頂きたいと考えております。


No93165 (魔界の仮面弁士 さん) に返信
> ダウンロード先が見当たらないと思ったら、記事が古すぎて
> ダウンロードリンクが失われている模様…。
> 当時のリンク先は下記のようです。(C#, VB, C++)
魔界の仮面弁士 さん、コメント頂きましてありがとうございます。いつも大変お世話になっております。
ソースコードを見つけて頂きましてありがとうございます。ご紹介いただきましたソースコードを現在動作確認しておりますが、詰まっている部分がございます。
恐れ入りますが、その点について改めてご相談させて頂くことはできますでしょうか。
仮面弁士さんは勿論、他にご存知の方がいらっしゃいましたらお知恵をお貸し頂けますと幸いです。

ご紹介頂いたソースコードのうち、VBExeCOMServerのプロジェクトをダウンロードしてコンパイルしたところ、COM自体は問題なく登録されました。
ただ、他のvb.netのプロジェクトにて、参照設定のCOMリスト上からVBExeCOMServerを選択してOKを押下したところ、

"A reference to 'VBExeCOMServer' could not be added.

The ActiveX type library C:...\VBExeCOMServer.tlb' was exported from a .Net
assembly and can not be added as a reference.

Add a reference to the .Net assembly instead."

というエラーメッセージが出てCOMとして追加することはできませんでした。
調べたところ、以下のURLにて、vb.netで作成したCOMは真のCOMではないため参照できないようでした。

上記エラーに関する参考URL
https://bytes.com/topic/visual-basic-net/answers/497630-exposing-net-assembly-both-vb6-net-1-more-time

そこで、ActiveXにしたため、参照設定に追加しなくともCreateObjectで使用できるのではないか、と思い
参照設定せずにCreateObjectで使用を試みたところ、エラーもなく動作させることができました。

問題なのは、上記で動作したのは、メソッドとプロパティに関してのみであり、イベントは捕捉できていない、という点が問題となっております。
CreateObjectを使用して、getEventなどでイベントを取得してハンドルを結び付けられないか、と思案いたしましたが、
getEventでイベントを取得しようとしても、__COMObjectに対してgetEventしてしまう形になり、上手くgetEventで取得することができません。
以下のURLが、今の自分と同じ状況なのではないかと考えておりますが、このURLの回答がよく理解できておらず、解決が難航しております。

自身と似た状態にある質問のURL
https://www.pcreview.co.uk/threads/eventhandler-for-late-bound-com-object.3325560/

上記のページには、「インターフェイスの定義をCOMクライアントにコピーする必要があります。」といったような回答がありますが、
これが何を意味するのか、理解が追い付けておらず、もしこの意味が分かる方、もしくは
CreateObjectにて取得したObjectインスタンスに対して、イベントを取得する方法をご存知の方がいらっしゃいましたら
お知恵をお貸し頂くことはできますでしょうか。

申し訳ございません、あまり触れたことのない分野であったため少し混乱しており、説明不足な点などございましたらご指摘いただけますと幸いです。
何卒よろしくお願いいたします。
返信 編集キー/


管理者用

- Child Tree -