ActiveXのexeファイルにVB6標準exeファイルを変換するためのベストプラクティスは何ですか?

StackOverflow https://stackoverflow.com/questions/584987

  •  06-09-2019
  •  | 
  •  

質問

私は、サードパーティのライブラリとコントロールをたっぷり使って、従来の大規模なVB6のエディタを持っており、最近、私は、メインエディタフォームから独立して、いくつかの他の形態を実行することができますので、それはマルチスレッドにするためにそれを設定する必要があります。基本的にはこれらの他の形態と、メインページから、ボタンのクリックで他の形態を実行している以外は、メインエディタの間の最小の通信があります。

私は、ActiveX exeファイルとしてそれを設定し、これを実現できるようにするためにグローバル・マルチユースへのクラスのセットを追加することにより、マルチスレッド1に、現在のアプリケーションに変換する方法を発見したグーグルのロットからだから。デバッグモードを経由して編集し、テストをしながら今、私が終了すると、奇妙なクラッシュの多くは時々起こるだろうことがわかっています。

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub
私はこれを行う際に、

だから私は絶対すなわち、何を知っている必要があります。私はアプリがより不安定になっているように見えることを恐れていて、潜在的な問題など?,。それともこれを行うには良い方法はありますか?

アップデート:

代わりに強制的に疑似マルチスレッドアプリに私のアプリをハッキングの

、私はここで良い人からアドバイスを採取し、標準exeファイルにコンポーネントをリファクタリングし、標準EXEに私のアプリをバック逆戻りし、シェル経由でそれらを呼び出すました。美しく作品:)

おかげ

役に立ちましたか?

解決

のVisual Basic 6は、自身の中にマルチスレッドではありません。別のVB6のEXEから参照するときのActiveX EXEとActiveX DLLの間でマルチタスク動作の違いのみが明らかです。グローバルマルチ使用クラスからインスタンス化されたオブジェクトは、独自のコンテキストで実行するのActiveX EXEで定義されています。 ActiveXのDLLからインスタンスオブジェクトを呼び出すEXEのコンテキストで実行されます。

これでマルチスレッドは、VB6の中にハッキングすることができますが、それは非常に厄介であるとんではない(たとえば、あなたがデバッグセッションを停止するには、IDEで停止ボタンを使用することはできませんか、プログラムがクラッシュします)をたくさん持っています。

何のActiveX EXEが良いのは、メインプログラムを停止せずに個別に実行することができます別であるが、関連するインスタンスを産卵のためです。あなたの簡単な説明に基づいて、私はあなたの最高の最高はなく、複数の別々のEXEへフォーム/モジュール/クラスで、元のEXE参照のActiveX EXEを持っているとして、あなたのEXEを維持することであると言うでしょう。

あなたが.DLLに拡張子を変更することができます.EXEために下にコンパイルする必要はありませんし、それはまだのActiveX EXEであることに注意してください。あなたのユーザーがmistakely自身でのActiveX EXEを実行しないようにこれを行います。

他のヒント

あなたが質問を少し明確にすることはできますか?それはマルチスレッドにする必要がある理由を私は理解していませんか?なぜ、あなただけの非モーダルフォームを表示することができない、それらはすべて同じ時刻に見えると応答します。あなたはそれがメインフォームだけでなく、他の人をロックと同じようにあなたの質問からそう聞こえるあなたのメインフォーム内のすべての時間を操作するいくつかのバックグラウンド処理をしていない限ります。

<時間>

Melaosは言う:まあメインエディタFRMがここに主なものであると私は、ユーザーが当社のサーバーに物事をアップロードするようないくつかの他のものを行うと、他の形式にビデオファイルを変換するために、追加のフォームを実行できるようにする必要があります。そして、これらのフォームは、他のEXEファイルを呼び出すためにシェルを使用しています。そして、実行時間はかなり時間がかかります。

<時間>

この場合、私は別のEXEはなく、困難である使用マルチスレッディング、に他の形態を作製することをお勧めします。あなたは、メインフォームからサブフォームにはほとんど通信が言う - それはちょうどそれらを示しています。したがって、あなたも、サブフォームのActiveX EXEファイルを作成する必要はありません。ただ、それらを標準EXEファイルを作成し、メインフォームからそれらをシェルます。

それをしないでください。マルチスレッドは、それのために意図されているツールを使用した場合であっても、正確に行うために非常に複雑です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top