リリースビルドのDLLをデバッグビルドのアプリで使って死 – プログラミング – Home

リリースビルドのDLLをデバッグビルド...
 
通知
すべてクリア

[解決済] リリースビルドのDLLをデバッグビルドのアプリで使って死


ららら
(@admin-rarara)
メンバー Admin
結合: 5年前
投稿: 119
Topic starter  

こんにちは、らららです。

リリースビルドでビルドしたDLLを
デバッグビルドでビルドしたアプリケーションから
使用したところ、死んでしまいました。

よく、デバッグビルドでうまく動いていたが
リリースビルドで実行したら動かなかったと聞きますが、
この現象もこの原因なのでしょうか。

DLLとアプリケーションでリリースとデバッグをあわせると
死にません。違うとこの現象がでるようです。
どなたか、情報お持ちでないでしょうか。


引用
トピックタグ
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

リリース版DLLで確保したメモリを、デバッグ版アプリ側で解放しているとかでは。
デバッグビルドでは、メモリ確保時にデッバグ用の情報を書き込むので、その情報
がないと逝ってしまうのでしょう(^^;。


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

あれ?、よく考えたら、解放するのはデバッグ版なので、アサートされるのか。
となると、メモリは関係ないのかな。
いずれにしろ、デバッグ版とリリース版では、ランタイムが違うので、その
あたりが怪しいですね。


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

あれ?、よく考えたら、解放するのはデバッグ版なので、アサートされるのか。
となると、メモリは関係ないのかな。
いずれにしろ、デバッグ版とリリース版では、ランタイムが違うので、その
あたりが怪しいですね。


返信引用
ららら
(@admin-rarara)
メンバー Admin
結合: 5年前
投稿: 119
Topic starter  

こんにちは。クラフトマンさん。
即レスありがとうございます。

ところで、DLLで確保して、アプリで開放、またその逆も
やってないです。
しかし、この情報は考えたことなかったっす。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>よく、デバッグビルドでうまく動いていたが
>リリースビルドで実行したら動かなかったと聞きますが、
>この現象もこの原因なのでしょうか。

らららさん こんにちは。

これは、メモリの初期化忘れが原因であったりもするようです。


返信引用
ららら
(@admin-rarara)
メンバー Admin
結合: 5年前
投稿: 119
Topic starter  

Bunさん、レスありがとうございます。

デバッグでは、0xcd等で初期化されるがリリースだと初期化されない
ってやつですかね。
確かに、DLLの値、出力や、メンバ変数等が初期化されないで、
アプリの方で、それらを使おうとすると死ぬかもしれないですね。

あ、でもそれもなさそうです。
このDLL,デバッグ-デバッグ リリース-リリースというように
DLLとアプリをあわせると死ななくなります。
これらの説明がつくでしょうか。

また、この現象の結論は結局、そのような使い方をするな!っていうので
終わってしまうと思いますが、すごく原因が知りたいっていう
状態になってます。私。(笑)
おまけに、このDLLのソースがないんです。(他社作成DLL)


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

らららさん、こんにちは。
MSDNによると、『/MD、/ML、/MT、/LD (ランタイム ライブラリの使用)』
あたりに、「混ぜるな危険(笑)」らしきことが書いてありますね。
ってことは、プロジェクトの設定で、ランタイムライブラリをリリース版
にしたデバッグプロジェクトと、リリース版DLLなら、うまく動くのだろう
か。あくまで実験としてですが。


返信引用
ららら
(@admin-rarara)
メンバー Admin
結合: 5年前
投稿: 119
Topic starter  

ありがとうございます。
まさに、「混ぜるな危険」と書いてありますね。

現象の起こったプロセスは、

スタティックライブラリ /MDd
ダイナミックライブラリ /MD
実行ファイル /MDd
です。

さらにつっこんでなぜ死ぬのかはわかりませんでしたが
MSDNにそう書いてあるなら安心です(笑)

>プロジェクトの設定で、ランタイムライブラリをリリース版
>にしたデバッグプロジェクトと、リリース版DLLなら、うまく動くのだろう
>か。あくまで実験としてですが。
これについては、明日会社にて現象の発生するプロセスにてやってみます。
確かにそういう理屈になりますね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました