初心者の加藤です。
教えて下さい。
OCXコントロールをCFormViewに貼って、
アクセスしたら、デバッグ版は落ちてしまい、
リリース版なら正常です。
なぜでしょうか?
環境はVC++6.0 SP5 NT4.0
よろしく願います。
有難うございます。
> OCXコントロール
これは自作、メーカ品、他人の作品でいうとどれでしょうか?
それによって、今後の調査の方向もかわってくると思いますが。
> デバッグ版は落ちてしまい、リリース版なら正常です。
これだと、「OCXがデバッグ版は落ちてしまい、リリース版なら正常です。」なのか
「OCXを使用している側がデバッグ版は落ちてしまい、リリース版なら正常です。」なのか
わかりませんでした。
どちらでしょう?
> 有難うございます。
?
すみませんでした。
OCXを使用している側がデバッグ版は落ちてしまいます。
使用するコントロールはフリーソフトです。
加藤
OCXを使用している側で落ちるのであれば落ちた処理が
特定できると思うんですけど、特定できてますか?
落ちる場所が特定できれば、あとはデバッグ版なんですから
落ちる直前でブレークして変数の値を確認する等の調査を
行えばよいんではないでしょうか。
コントロールへのアクセスで落ちます。
m_control.MoveWindow(・・・)←これです。
m_controlはコントロール変数(オブジェクト)です。
よろしく願います。
m_control の型はOCXのラッパークラスだと思いますが、多分あってますよね?
あと、「落ちる」の具体的な事象をもう少し知りたいんですが、
1.プログラムが画面からパッと消える。
2.「Assert」って感じのメッセージボックスが出てくる。
3.他に何らかのメッセージが出てくる
4.その他
の、どの辺りでしょう?
最後に
> m_control.MoveWindow(・・・)←これです。
で落ちるって事ですが、落ちる時オブジェクトは既に生成されて
いるんでしょうか?
もし、オブジェクトが生成される前であれば異常を示す
メッセージボックスが出てもおかしくないと思います。
MoveWindow を行うタイミングがわかると、もう少し見えてくるかも
しれません。例えば WM_SIZE メッセージを処理するところとか。
ん さん
いろいろ有難うございます。
落ちるときは赤×点の窓にMemory read only・・・Write 不可で
2.「Assert」って感じのメッセージボックスが出てくる。
に当たるかな?
なお、オブジェクトはクラスウィザードで(変数の追加)生成したつも
りです。落ちるタイミングは殆どどこでも(当初はOnShowWindow()で)
落ちます。
もしかして、クラスウィザードで生成したオブジェクトに問題あり?
疑わしい点としては
「画面が作成される前に画面を制御しようとしている」
可能性があると思ったんですね。
まだ存在しない画面のサイズを変更しようとしても無理なわけです。
一応、確認手段としてはエラーが発生する処理の直前で
if( m_control.m_hWnd == NULL )
{
AfxMessageBox(作成前の画面を操作しようとしてます。);
}
とかやれば、出来たと思います。
あとは、メッセージボックスが出てくるわけですから、
そのままブレークしてコールスタックの情報から原因を調べるのが
一番確実な気はします。
有難うございます。
頑張ってみます。