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

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

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

Re[1]: VB6のACTIVEXをVB.NETで同じ動きをさせるには


(過去ログ 74 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■43647 / inTopicNo.1)  VB6のACTIVEXをVB.NETで同じ動きをさせるには
  
□投稿者/ 迷い人 (3回)-(2009/11/15(Sun) 01:48:44)

分類:[VB.NET/VB2005 以降] 

現在、XP環境でVB6で作成したプログラムをVB2005にコンバート作業を行っています。

VB6の標準EXEとVB6のActivexEXEをVB2005に変換してしまうとActivexEXEがVB6の時と同じ動きになりません。
処理の流れは
1.標準EXE内の「作成ボタン」を押すと、クラスのメソッド
 でactivexEXEを起動
2.起動されたactivexEXEは自EXEのタイマーイベント処理で
 起動時からの経過時間をラベル表示
3.activexEXE起動後、続きの標準EXEのコード内で
 ファイルの作成(かなり重い処理)を行う。
4.ファイルの作成が終わると、activexEXEに通知して処理を終了する。

問題は、activexEXEをVB2005にすると経過時間の表示が止まってしまいます。結果出力は正しいので内部でカウントはされていますが。
ファイルの作成で処理が占有されてしまっている?

今まで試みた方法
・Background Workerによるマルチスレッド化。
 標準EXE、activexEXEでそれぞれ試してみましたが表示が固まって
 しまいました。
・activexEXEをVB2005でcom登録
 コンパイル時のcom相互登録をするのに設定でクラスライブラリに
 変更。標準EXEからcom登録による参照は可能になったが、クラス
 ライブラリがDLLのためか現象変わらず。

このような現象を対処された方ご教授願います。
よろしくお願い致します。
引用返信 編集キー/
■43648 / inTopicNo.2)  Re[1]: VB6のACTIVEXをVB.NETで同じ動きをさせるには
□投稿者/ Azulean (480回)-(2009/11/15(Sun) 02:51:41)
2009/11/15(Sun) 02:54:06 編集(投稿者)

No43647 (迷い人 さん) に返信
> VB6の標準EXEとVB6のActivexEXEをVB2005に変換してしまうとActivexEXEがVB6の時と同じ動きになりません。
ActiveX EXE はアウトプロセス COM と呼ばれて、別のプロセスとして実行されるものです。(多分。実体を確かめてません)
そのため、標準 EXE とお呼びになっているプロセスがビジー状態でも別物として処理を実行できます。

> 今まで試みた方法
> ・Background Workerによるマルチスレッド化。
>  標準EXE、activexEXEでそれぞれ試してみましたが表示が固まって
>  しまいました。
これは、スレッドにどのような仕事をさせているかが問題となっていると思われます。
例えば、メインスレッドで重たい処理をすると、画面の表示はまず更新できません。
重たい処理を BackgroundWorker のスレッドで実行するようにしてください。

引用返信 編集キー/
■43649 / inTopicNo.3)  Re[1]: VB6のACTIVEXをVB.NETで同じ動きをさせるには
□投稿者/ 渋木宏明(ひどり) (1248回)-(2009/11/15(Sun) 02:54:27)
渋木宏明(ひどり) さんの Web サイト
> VB6の標準EXEとVB6のActivexEXEをVB2005に変換してしまうとActivexEXEがVB6の時と同じ動きになりません。

VB.NET の標準の枠組みだけでは ActiveX EXE を作ることはできません。

VB.NET で、どのように ActiveX EXE に相当するものを実装したのか、その辺を明らかにしてもらわないとどーにもならないように思います。

引用返信 編集キー/
■43650 / inTopicNo.4)  Re[1]: VB6のACTIVEXをVB.NETで同じ動きをさせるには
□投稿者/ 魔界の仮面弁士 (1388回)-(2009/11/15(Sun) 03:24:14)
No43647 (迷い人 さん) に返信
> 処理の流れは
「タイマー」と「通知」という点は、VB6 付属サンプルの Coffee に少し似ていますね。
細かい部分はちょっと違うようですけれども。
http://msdn.microsoft.com/en-us/library/aa445814.aspx

今回の場合、ActiveX EXE 側は単に経過時間を表示するのみで、
標準 EXE 側が重い処理を担当している、ということなのでしょうか。


> ・Background Workerによるマルチスレッド化。
>  標準EXE、activexEXEでそれぞれ試してみましたが表示が固まって
>  しまいました。
表示が固まった、というのは、ActiveX EXE 側にタイマーのイベントが発生しないという意味でしょうか。
それともイベントは定期的に発生しているが、画面が描画されないという意味でしょうか。

で、ファイルの作成が原因というのであれば、
 ・メインスレッドから、ActiveX EXE を呼び出す。
 ・ファイル生成部分を含む重い処理は、標準EXE 上の BackgroundWorker で処理する。
  (ファイル生成処理のコードでは、フォーム上のコントロールを直接操作しない)
 ・BackgroundWorker の処理が完了した時点で、ActiveX EXE に通知。
という実装になるかと思います。(そもそも、ActiveX 化する必要があるのかどうかは疑問ですが)

# 無理に VB6 時代の ActiveX の手法を真似る事は無いかと思います。
# もっとも、詳細が分からないので現時点では何とも言えないのですが。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -