シングルトンが定義されている DLL があります。
この DLL の複数のインスタンスをロードできるアプリがあります。
DLL には、DLL インスタンスごとにシングルトン インスタンスが必要です。そうしないと、DLL がクラッシュします。
複数の DLL インスタンスに対してシングルトン インスタンスが 1 つしかないことがわかりました。なんで?どうすれば解決できますか (可能であれば、シングルトンを別のものにリファクタリングせずに)。
助けてくれてありがとう。
シングルトンが定義されている DLL があります。
この DLL の複数のインスタンスをロードできるアプリがあります。
DLL には、DLL インスタンスごとにシングルトン インスタンスが必要です。そうしないと、DLL がクラッシュします。
複数の DLL インスタンスに対してシングルトン インスタンスが 1 つしかないことがわかりました。なんで?どうすれば解決できますか (可能であれば、シングルトンを別のものにリファクタリングせずに)。
助けてくれてありがとう。
app内に複数のインスタンスがあると述べましたが、これは、それらがすべて同じプロセス内にあることを意味します。
他の静的メンバーと同様に、シングルトンは、DLL などからロードされたオブジェクトに属しているかどうかに関係なく、アプリケーションごとに 1 つに制限されます。
コードをリファクタリングせずにはいられません。DLL はプロセス空間に「ロード」されます。そこに定義されている静的メンバーは、プロセスに対して静的です (ロードされた DLL には独自のメモリがありません)。
複数のオブジェクトを取得するには、非標準の「シングルトン」を作成する必要があります。
また、dll のソースがない場合は、プロセスごとに 1 つの「シングルトン」として、別のプロセスにロードする必要があります。これらは、dll 通信部分を処理するだけのメイン プロセスの単純な子プロセスである可能性があります。
そしてもちろん、メイン プロセスと子プロセスの間の何らかの通信スキームを用意する必要があります。これは、dll をどれだけ使用しているかによって異なります。大量のデータを使用した数回の呼び出しですか?または、実行ごとに異なる多くの異なる呼び出しですか?
通常、dll を使用して複数の単純な呼び出しを行う場合は、独自のコードをリファクタリングする方がおそらく簡単です。