こんにちは、らららです。
リリースビルドでビルドしたDLLを
デバッグビルドでビルドしたアプリケーションから
使用したところ、死んでしまいました。
よく、デバッグビルドでうまく動いていたが
リリースビルドで実行したら動かなかったと聞きますが、
この現象もこの原因なのでしょうか。
DLLとアプリケーションでリリースとデバッグをあわせると
死にません。違うとこの現象がでるようです。
どなたか、情報お持ちでないでしょうか。
リリース版DLLで確保したメモリを、デバッグ版アプリ側で解放しているとかでは。
デバッグビルドでは、メモリ確保時にデッバグ用の情報を書き込むので、その情報
がないと逝ってしまうのでしょう(^^;。
あれ?、よく考えたら、解放するのはデバッグ版なので、アサートされるのか。
となると、メモリは関係ないのかな。
いずれにしろ、デバッグ版とリリース版では、ランタイムが違うので、その
あたりが怪しいですね。
あれ?、よく考えたら、解放するのはデバッグ版なので、アサートされるのか。
となると、メモリは関係ないのかな。
いずれにしろ、デバッグ版とリリース版では、ランタイムが違うので、その
あたりが怪しいですね。
こんにちは。クラフトマンさん。
即レスありがとうございます。
ところで、DLLで確保して、アプリで開放、またその逆も
やってないです。
しかし、この情報は考えたことなかったっす。
>よく、デバッグビルドでうまく動いていたが
>リリースビルドで実行したら動かなかったと聞きますが、
>この現象もこの原因なのでしょうか。
らららさん こんにちは。
これは、メモリの初期化忘れが原因であったりもするようです。
Bunさん、レスありがとうございます。
デバッグでは、0xcd等で初期化されるがリリースだと初期化されない
ってやつですかね。
確かに、DLLの値、出力や、メンバ変数等が初期化されないで、
アプリの方で、それらを使おうとすると死ぬかもしれないですね。
あ、でもそれもなさそうです。
このDLL,デバッグ-デバッグ リリース-リリースというように
DLLとアプリをあわせると死ななくなります。
これらの説明がつくでしょうか。
また、この現象の結論は結局、そのような使い方をするな!っていうので
終わってしまうと思いますが、すごく原因が知りたいっていう
状態になってます。私。(笑)
おまけに、このDLLのソースがないんです。(他社作成DLL)
らららさん、こんにちは。
MSDNによると、『/MD、/ML、/MT、/LD (ランタイム ライブラリの使用)』
あたりに、「混ぜるな危険(笑)」らしきことが書いてありますね。
ってことは、プロジェクトの設定で、ランタイムライブラリをリリース版
にしたデバッグプロジェクトと、リリース版DLLなら、うまく動くのだろう
か。あくまで実験としてですが。
ありがとうございます。
まさに、「混ぜるな危険」と書いてありますね。
現象の起こったプロセスは、
スタティックライブラリ /MDd
ダイナミックライブラリ /MD
実行ファイル /MDd
です。
さらにつっこんでなぜ死ぬのかはわかりませんでしたが
MSDNにそう書いてあるなら安心です(笑)
>プロジェクトの設定で、ランタイムライブラリをリリース版
>にしたデバッグプロジェクトと、リリース版DLLなら、うまく動くのだろう
>か。あくまで実験としてですが。
これについては、明日会社にて現象の発生するプロセスにてやってみます。
確かにそういう理屈になりますね。