- PR -

起動中の.NETアプリケーションにCOMコンポーネントからアクセス

投稿者投稿内容
ListRun
会議室デビュー日: 2005/08/25
投稿数: 9
投稿日時: 2006-01-24 10:35
自分が混乱したまま書き込んでしまい、失礼しました。
必要なのは、COM オブジェクトと .NET アプリケーションの連携機能です。
今は以下のように整理しています。

今回やりたいことは、プロセス間通信である
 ↓
従来は、オートメーションを利用して実現できた
 ↓
.NETでは、オートメーションをサポートしておらず、他にプロセス間通信の手段が提供されている

というわけで、今回必要なのはプロセス間通信(多分リモーティング)だと思います。
いま少し自分の中で理解と整理を深めたいと思います。
ありがとうございます。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-01-24 11:57
Using the .NET Framework Class Library from VB6
http://msdn.microsoft.com/vbrun/vbfusion/usingnet/default.aspx
The .NET Framework Class Library (FCL) 呼び出しなら例はあるようです。
検索語は
com bridge .net vb6

[ メッセージ編集済み 編集者: MMX 編集日時 2006-01-24 12:01 ]
ListRun
会議室デビュー日: 2005/08/25
投稿数: 9
投稿日時: 2006-01-24 18:30
>MMXさん
MSDNと似たような内容かと思ったら、続きがあるんですね。
続きも読んでみます。
情報ありがとうございます。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-24 21:27
引用:

The .NET Framework Class Library (FCL) 呼び出しなら例はあるようです。



.NET のクラスをインプロセスサーバとして利用することは、.NET の COM 連携機能により可能です。

ですが、.NET の標準クラスライブラリやランタイムは、アウトプロセスサーバの作成を積極的にサポートしていません。

よって、「COM オブジェクトと .NET アプリケーションの連携」に適用するのは厳しいです。

加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-01-25 01:26
引用:

ListRunさんの書き込み (2006-01-24 10:35) より:
必要なのは、COM オブジェクトと .NET アプリケーションの連携機能です。

というわけで、今回必要なのはプロセス間通信(多分リモーティング)だと思います。



ええ!!そうなの?

単に「COMオブジェクト」の中で

Instanse i = CoCreateInstance(.NETアプリケーションDLL);

すればいいだけじゃないの?そうすればふつーに.NETアプリケーションの
リファレンスとインターフェイスが取れるはずですけど。(未確認)

.NETアプリケーションはふつーにバイナリ生成すると「COMオブジェクト」
と「振る舞い」が一緒ぢゃなかったっけ?

もちろんバイナリ自身(そもそもバイナリですらないわけだが)は「COMオブジェクト」
とは似ても似つかないけど。そこらへんはCLRがなんとかする気がする。

プロセス間通信するCOMオブジェクトなんてわざわざ作らなくてもいいはずだけど。。
ちがうのかな。

CLRは「なんでもあり」だと思うなり。

ただ、開発したら最後、保守は無茶だと思うけど。

Dim A As String;
A = gcnew System::String();
Console::WriteLine("{0}",A);
A->toDateTime();

なんつーソースコードを保守できるとは思えない。。
ちなみに上記はVB.NET + C++/CLI + C#。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-25 07:44
引用:

単に「COMオブジェクト」の中で

Instanse i = CoCreateInstance(.NETアプリケーションDLL);

すればいいだけじゃないの?そうすればふつーに.NETアプリケーションの
リファレンスとインターフェイスが取れるはずですけど。(未確認)



できないです。

CoCreateInstance() は COM API で、登場順から考えても明らかなように、COM は .NET のことを知らないため、CoCreateInstance() は .NET のアセンブリから .NET のクラスインスタンスを生成することは出来ません。

似たような動作は、.NET の COM 連携機能によって可能となりますが、その場合は .NET のクラスは「単なる COM オブジェクト」に見えます。

しかも、この機能は前述のようにインプロセスサーバしかサポートしていません。

引用:

Dim A As String;
A = gcnew System::String();
Console::WriteLine("{0}",A);
A->toDateTime();

なんつーソースコードを保守できるとは思えない。。
ちなみに上記はVB.NET + C++/CLI + C#。



1つのソース中で複数言語を使用することは出来ません。
現状、少なくともアセンブリを生成する際は1つの言語で記述されている必要があります。
(アセンブリ生成後に、それらを合成することは可能)


[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-01-25 07:51 ]

スキルアップ/キャリアアップ(JOB@IT)