Win7 で C++/CLI、.net 4.5、VS2012 でコーディングしています。
System::Diagnostics::Process(::Start())を使用して2番目のプロセスB.exeを開始するメインプロセスA.exeがあります。
2 番目のプロセスB.exeは、(ネイティブ) DLL C.dllを使用します。
C.dllでは、次のように static を宣言しました。
static bool B = true;
if(B == true )
{
MyFile << "Switch true to false" << endl;
B=false;
}
MyFile << _getpid() << endl;
私が得るのは、 _getpid() が B.exe の PID ではなく、 A.exe の PID を返すことです。A.exeではなく、C.dllがプロセスB.exeに関連付けられるのは難しいと思います。?????????
また、A.exeでB.exeを数回 (たとえばループで)起動すると、static 変数が true にリセットされることはありません。なんで?
それが役立つかどうかはわかりませんが、私は使用します:
StartProcessInfo.UseShellExecute = false;
StartProcessInfo.CreateNoWindow = true;
他のフィールドはデフォルト値のままです。
誰かが私を助けることができますか?
ありがとう!
更新 1
最後に、A.exeとB.exeの両方がC.dllを読み込みます。しかし、疑問が残ります: DLL 内の静的変数は、実行可能ファイルごとに 1 回ずつ、2 回マップされるべきではありませんか???? また、PID を書き込む関数を呼び出すと、B.exeから呼び出されます。この間、A.exeはB.exeの完了を待機するためです。