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

わんくま同盟

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

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


■93264 / )  Re[4]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ Atata!! (1回)-(2019/11/30(Sat) 22:33:13)
2019/11/30(Sat) 22:47:06 編集(投稿者)
2019/11/30(Sat) 22:43:50 編集(投稿者)

> その中で参照して使用したいdllが32bitのものしかなく、こちらではコンパイルしなおしたり、作り直すことはできないもののため、困っておりました。

該当の DLL が .NET で作成されていないなら DllSurrogate を設定すれば解決する可能性があります。

以下のサイトの 3. サロゲートなCOMサーバ(local_server) の設定だけで適用可能かもしれません。
https://qiita.com/tanakah/items/0f70c974e2728279f7b6

他にも参考になるサイトがいくつかあるので、検索してみてください。



> 「Visual C++、Visual C#、または Visual Basic .NET を使用して、アウト プロセスの COM コンポーネントを開発する方法」

マイクロソフトが RegistrationServices.RegisterTypeForComClients を使用しないサンプルを提供しているのは謎ですが、
.NET にはアウトプロセスサーバーをサポートする機能があります。
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.registrationservices.registertypeforcomclients?view=netframework-4.8

私のサイトにサンプルを置いてありますので、参考にしてみてください。
http://atata.sakura.ne.jp/net/chap20.html


> ご紹介頂いたソースコードをもとに、VBExeCOMServerに適用するようにして実行してみたところ、adviseの部分で「値が有効な範囲にありません」とエラーが出てしまいました。

該当のイベントシンクの実装に若干問題があるため、COM Server 次第ではエラーとなる可能性があります。

EnumConnectionPoint.Next の呼び出しで戻り値のチェックに 0 以上を指定していますが、
S_FALSE を返却する COM Server に対しては While 文内に入ります。
また、AllocHGlobal は確保したメモリを 0 クリアしないため、
COM Server側でも 0 クリアされていない場合、
意図しない動作になると思います。



返信 編集キー/


管理者用

- Child Tree -