はじめまして。
今VisualC++6.0とVisualBasic6.0でプログラムを作成しています。
VCのプログラムをDLL化してVBで呼び出すようにしています。
今やろうとしていることはDLLを呼び出して、処理を途中で待機させ、VBのコマンドボタンが押されれば処理を再開するということです。
調べてもみたのですが、こういう風にDLLを使ったプログラムは見つけられませんでした。
こういった処理をさせることはできるのでしょうか?
VB のプログラムから DLL 関数を呼び出し、その中で待機してしまった場合、VB 側に戻ってこないので、VB でコマンドボタンを押すことができません。
DLL 内でスレッドを生成して待機させ、VB でボタンを押したときにスレッドを再開させることは可能です。
マルチスレッドとか同期オブジェクトについて調べてみてください。
DLLに「前半を処理する関数」と「後半を処理する関数」を用意するだけでは?
DLL中で待機させる必要があるかどうかで対処方法が変わると思いますね。
内部でイベント待ちで待機する必要がある等であれば、シャノンさんの案でしょうし、
実際には処理を一旦、やめて指示が来た後で続きをすればよいと言う話なら
REEさんの案でよいと思います。
この辺はDLL側でやらせたい処理の内容によると思うので今の説明内容からでは判断できませんね。
突っ込んだアドバイスがほしいのであれば、説明内容も突っ込んだ内容にしないと無理だと思います。
シャノンさん、REEさん、PATIOさん コメントありがとうございます。
説明不足だったのでもう少し詳しく書きます。
今キャプチャープログラムを作ろうと思っています。
VCで動画のプレビューのプログラムのDLLを作成し、VBのコマンドボタンを押すとDLLを呼び出しプレビューが開始されるようになっています。
プレビュー中にもう一度コマンドボタンを押すと、プレビューを終了させたいのですが方法がわかりません。
マルチスレッドを使ってできるのであればやってみようと思うのですが、調べてみても処理を一度停止させ、再開させる方法がわかりませんでした。
申し訳ないのですが、やり方などご教授いただけませんでしょうか?
プログラムはこちらのサイトのプログラムを参考に作成しています。
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html#vidcap
キャプチャプログラムっつーのは作ったことが無いから詳しいことはわからないけれど、途中で待機させておく必要は無いような気がするんだけど、そのへんどうなの?
ちなみに、ボタンを2度目に押したらプレビューが止まって、3度目に押したらまた再開されるんだと思うけど、2度目に押してから3度目に押すまではどうなっている状態?
ボタンを2度押すとプレビューがストップし、3度目を押すまでは何も表示されていない状態にしたいと考えています。
今のプログラムではメッセージボックスを表示することに処理をとめており、メッセージボックスでOKを選択すると、処理が再開し、終了のプログラムがスタートするようになっています。そこをメッセージボックスでとめるのではなく、マルチスレッドなどの方法で止めたいと思っています。
説明が下手ですいません。。
2度目押したら「一時停止」じゃなくて「キャプチャ終了」してしまった、3度目押したらまた新しく始めればいいじゃない。
> 「キャプチャ終了」してしまった
「キャプチャ終了」してしまって
すみません!間違えました。
ボタンを3度押すとプレビューを終了させたいです。
一度止めたら再開することは無いんなら、やっぱり待機する必要は無いじゃないですか。
VCの中で何でもかんでもやらせようとすると無理が出ませんか?
VCでDLLは単機能を提供するようにしてVBでユーザーオペレーションの
ハンドリングをしながらDLLの単機能を呼び出して制御する方が良いと思います。
今のVCのDLLをそのまま使おうとするあまり無駄に苦労しているような気がします。
DLLの方も自分で弄れるのであれば、DLL側の実装を見直した方が早いと思いますよ。
ツイート | ![]() |