ここから本文です

VCのDLL内の別々の関数として呼び出された処理間で、同じ変数値の共有を行いたいの...

aibakapさん

2013/3/111:29:40

VCのDLL内の別々の関数として呼び出された処理間で、同じ変数値の共有を行いたいのですが、staticのグローバル変数にして片方の関数内で更新してももう片方の関数で見ると値が変わりません。どうすれば変わりますか

具体的にはVCで作ったaaa.dllというDLLがあり、その中でグローバル変数
static long g_aaa
を宣言します。
その上で、任意の1つのexeから、aaa.dll内のFuncBBBという関数を呼出し、0 がセットされているg_aaaの値に 1 をセットします。
その後に同じexe(途中で再起動等はされていない。常駐状態)からaaa.dll内のFuncCCCという関数を呼出し、g_aaaの値を参照すると、 0 のままとなっています。 1 になっていることを期待したいのですが、どうすれば良いのでしょうか?

補足livingintheblueshadowsさんにご回答頂いた内容で、2番目と3番目ではないことは確認済みなので、
「FuncBBB を呼んでからFuncCCC を呼ぶまでの間にDLLがアンロードされてしまっている。」
の可能性が高いと思うのですが、アンロードしているかどうかの確認は呼出し側のソース上どのような記述を探せばよいでしょうか?(もしくはソース以外でもどのように確認できますか?)

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
412
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

livingintheblueshadowsさん

リクエストマッチ

2013/3/119:25:38

原因として思いつくものを挙げると、
・FuncBBB を呼んでからFuncCCC を呼ぶまでの間にDLLがアンロードされてしまっている。
・FuncBBB がセットしているg_aaa とFuncCCC が参照しているg_aaa は同名の別の変数。(FuncBBB とFuncCCC は別のソースファイルにあって、それぞれがg_aaa を宣言しているとか。)
・FuncBBB、FuncCCC 以外の何かがg_aaa に0をセットしている。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。