- PR -

DDE通信

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-26 16:09
VB6のプログラムをC#に書き換えたいと考えています。
ところがVB6はDDE通信のみ対応している古いアプリケーションと
テキストボックス経由でDDE通信しています。(下記参照)

VB6

TextBox1.LinkTopic = "xxxx" & "|" & "xxxxDDE"
TextBox1.LinkItem = "DDESourceBox"
TextBox1.LinkMode = vbLinkAutomatic

MSDNによると正攻法ではC#(およびVB.NET)はDDE非対応なので無理(リンク先参照)
ですが、回避する妙案を探しています。妙案はないでしょうか?
Q1.
C#にDDE通信機能を追加する方法はありますか?
例えばWindowsFormにDDE通信機能を追加するコントロールなどご存知ですか?

Q2.
大部分をC#で記述し、DDE通信部分だけをVB6で記述しゲートウェイの役割を持たせることができないかとも考えています。その場合、C#プロセスとVB6プロセス間の通信をどう実現しますか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-08-26 17:15
引用:

ひろしさんの書き込み (2008-08-26 16:09) より:
Q1.
C#にDDE通信機能を追加する方法はありますか?
例えばWindowsFormにDDE通信機能を追加するコントロールなどご存知ですか?


.NET から Windows API の中の DDE の関数を呼び出すしかないと思います。Microsoft からは提供していないと思います。
自分でライブラリーを作るのはかなり大変ですが、すでにどなたかが作られたライブラリーとしてはつぎのものがあります。
NDde http://www.codeplex.com/ndde
DdeUtils http://www7b.biglobe.ne.jp/~motta/tools.html
ほかにも探せばいくつかあるとは思いますが、私もそれほど良くは知りません。
それほどたくさんはないとも思います。よりどりみどりというわけでもないので、ライセンス形態で自分にあったものを見つけるのには苦労するかもしれません。

余談ですが、いまどきまだ DDE を使う数少ないアプリケーションとしては、楽天証券が使っているツール RSS(Realtime Spread Sheet)が有名です。(RDF Site Summary とは関係ありません。)
これらの名前で検索するという方法もあります。

引用:

ひろしさんの書き込み (2008-08-26 16:09) より:
Q2.
大部分をC#で記述し、DDE通信部分だけをVB6で記述しゲートウェイの役割を持たせることができないかとも考えています。その場合、C#プロセスとVB6プロセス間の通信をどう実現しますか?


VB6 で昔ながらの ActiveX Control として作って、それを C# で使えば良いという手は思いつきます。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-31 22:52
ご回答ありがとうございます。
ライブラリとどちらにしようか迷いましたが、
結局ActiveXで対処しました。

余談ですが...
やっつけ仕事だったでVirtual PCで開発しました。
こういう時仮想マシンが便利ですね。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2008-09-06 20:16
ActiveX(VB6)の作成でつまずいてしまいました。
作成方法に問題があると思われます。

質問内容が本題と離れてしまうので、スレを立て直しました。
VB6に関わりが深いことなので、VB研の会議室のほうが適切かと思い、
そちらにけいさいさせていただきました。

ActiveX(VB6)のコンストラクタ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46310&forum=36&0
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2008-09-06 20:33
追記

C#からVB6で作成したラッパーアプリケーション(EXE)経由で、VB6で作成したActiveXコントロールを一応は呼び出すことはできました。C#アプリとVB6アプリとではファイルで情報伝達しています。

C#アプリ(EXE)→VB6アプリ(EXE)→VB6 ActiveXコントロール(OCX) DDE通信

しかし、これではあまりにもまだるっこしいので、
C#から直接ActiveXコントロールを呼び出そうとすると、
ActiveXのコンストラクタの定義が認識できない問題に直面しました。

C#アプリ(EXE)→VB6 ActiveXコントロール(OCX) DDE通信
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2008-09-07 00:16
C#からActiveXの直接呼出しも解決できました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46310&forum=36&3

ありがとうございました。
1

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