3

シングルトンが定義されている DLL があります。

この DLL の複数のインスタンスをロードできるアプリがあります。

DLL には、DLL インスタンスごとにシングルトン インスタンスが必要です。そうしないと、DLL がクラッシュします。

複数の DLL インスタンスに対してシングルトン インスタンスが 1 つしかないことがわかりました。なんで?どうすれば解決できますか (可能であれば、シングルトンを別のものにリファクタリングせずに)。

助けてくれてありがとう。

4

3 に答える 3

1

app内に複数のインスタンスがあると述べましたが、これは、それらがすべて同じプロセス内にあることを意味します。

他の静的メンバーと同様に、シングルトンは、DLL などからロードされたオブジェクトに属しているかどうかに関係なく、アプリケーションごとに 1 つに制限されます。

于 2011-01-07T11:05:14.233 に答える
1

コードをリファクタリングせずにはいられません。DLL はプロセス空間に「ロード」されます。そこに定義されている静的メンバーは、プロセスに対して静的です (ロードされた DLL には独自のメモリがありません)。

複数のオブジェクトを取得するには、非標準の「シングルトン」を作成する必要があります。

于 2011-01-07T11:22:02.647 に答える
1

また、dll のソースがない場合は、プロセスごとに 1 つの「シングルトン」として、別のプロセスにロードする必要があります。これらは、dll 通信部分を処理するだけのメイン プロセスの単純な子プロセスである可能性があります。

そしてもちろん、メイン プロセスと子プロセスの間の何らかの通信スキームを用意する必要があります。これは、dll をどれだけ使用しているかによって異なります。大量のデータを使用した数回の呼び出しですか?または、実行ごとに異なる多くの異なる呼び出しですか?

通常、dll を使用して複数の単純な呼び出しを行う場合は、独自のコードをリファクタリングする方がおそらく簡単です。

于 2011-01-07T12:07:47.547 に答える