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

わんくま同盟

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

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


■93164 / )  Re[2]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ とっちゃん (649回)-(2019/11/25(Mon) 11:08:46)
No93145 (まる さん) に返信

> dllではなくCOMとして参照したい理由といたしましては、現在64bitのvb.netのアプリを開発しておりますが、
> その中で参照して使用したいdllが32bitのものしかなく、こちらではコンパイルしなおしたり、作り直すことはできないもののため、困っておりました。
> 調べているうちに、32bitでも、COMであれば64bitから参照しても問題なく使用できる、といった記事がいくつかあったため、
> COMのラッパーを作成して、そのCOMを64bitアプリが参照すればよいのではないか、と思い至りました。
>
64bitプロセス内で 32bit の DLL をロード・実行する方法はありません(プログラム的にできないようになっているため)。
32bit<->64bitでやり取りする場合は、32bitDLLを使うプロセス(exe)を別に作成し、64bitプロセスとの間でプロセス間通信を行う必要があります。
このやり取りを総称して「プロセス間通信(IPC:Inter-Process Communications)」と呼びます。この中の一つに COM によるやり取りがあります。
とはいえ、.NET で COM を連携のために使うのはあまりお勧めはできないので、あえてほかの方法を提示しておきます。

実際はもっといろいろ種類があるのですが、プログラム連携という部分で比較的導入しやすいものを2つ挙げておきます。

1. パイプ(pipe)
https://docs.microsoft.com/ja-jp/dotnet/standard/io/pipe-operations?WT.mc_id=DT-MVP-32182

.NET アプリ同士だけでなく、Windows 上で動くプログラムであればほぼ種類を問わず使えるプロセス間通信の一つです。
匿名パイプと名前付きパイプの2種類があります。状況に応じてどちらを使うかは変わるのでどちらでも好きな方を使えばいいと思います。

2. WCF(Windows Communication Foundation)
https://docs.microsoft.com/ja-jp/dotnet/framework/wcf/?WT.mc_id=DT-MVP-32182

.NET Core への移植はコミュニティベースになってしまったため、本流からは外れてしまいましたが
.NET Framework ベースであれば現役で使えます。
.NET Remoting を使ったことがある場合は、こちらが直接的な後継にあたり、それなりに使ってみたな記事のあるので比較的とりかかりしやすい気がします。

返信 編集キー/


管理者用

- Child Tree -