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

わんくま同盟

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

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


■93193 / )  Re[5]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ 魔界の仮面弁士 (2499回)-(2019/11/27(Wed) 08:57:25)
No93192 (まる さん) に返信
> COMとして追加することはできませんでした。
ClassInterface 属性を付与していない(または AutoDispatch を指定する)と、
事前バインディングができませんので御注意ください。(実行時バインディングは可能)

ComVisible 属性で公開したクラスに対して、COM インターフェイスを明示的に Implements しておき、
そのクラスに <ClassInterface(ClassInterfaceType.None)> を付与してみてください。

もしくは実行時バインディング前提の利用で構わなければ、Interface は作らずに
<ClassInterface(ClassInterfaceType.AutoDispatch)> を指定するだけでも良いかと。


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

.NET による ActiveX DLL 作成手順としては、このあたりが良くまとまっているかと思います。
http://j.mp/35DOyAw
https://qiita.com/tomochan154/items/1ce33f2aef167c0fed9d


> イベントは捕捉できていない、という点が問題となっております。

上記 URL にもありますが、事前バインディングの場合は、イベントインターフェイスを用意して、
それを ComSourceInterfaces 属性で指定するようにします。

実行時バインディングの場合、相手が VBScript なら VBS の GetRef 関数を使って
擬似デリゲートを割り当てる手法が使えます。GetRef で割り当てられたメソッドは、
AddressOf のような関数ポインタとしてではなく、既定のメソッドを持った COM オブジェクトとして
割り当てられるため、VB.NET 側からは DispId(0) に対するメソッド呼び出しでコールバックできます。

 CallByName( vbsからGetRefでSetされたオブジェクト, "[DispId=0]", CallType.Method, 追加の引数があればここに)
返信 編集キー/


管理者用

- Child Tree -