2011-01-07 308 views
3

シングルトンが定義されたDLLがあります。C++、dllの複数インスタンス、シングルトン

私はこのDLLの複数のインスタンスを読み込むことができるアプリケーションを持っています。

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

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

ありがとうございました。

+0

シングルトンを使用して、あなたが支払うものを手に入れてください。 – Puppy

+1

@Sanja:あなたがリンクしている質問は、単一のシングルトンを持つ複数のアプリケーションで使用されているDLLについてです。この質問は、複数のシングルトンを持つ単一のアプリケーションで使用されるDLLに関するものです。 – interjay

+1

@moala:1つのアプリケーションでDLLの複数のインスタンスを読み込む理由は何ですか? – interjay

答えて

1

というアプリ内に複数のインスタンスが存在することが記載されていますが、それらはすべて同じプロセス内にあることを意味します。他の静的メンバのような

シングルトンはあなたのコードをリファクタリングすることなく、関係なく、彼らはなど

1

まさかDLLからロードされたオブジェクトに属しているかどうかのアプリケーションごとに1つに制限されています。 DLLはプロセス空間に「ロード」されます。そこに定義されている静的メンバーはすべてプロセスの静的です(ロードされたDLLには独自のメモリがありません)。

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

1

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

もちろん、メインプロセスと子プロセスの間の通信スキームは、dllの使用量によって異なります。たくさんのデータを持つほんの数回の呼​​び出しですか?または、実行するごとに異なる多くの異なる呼び出し?

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

+0

まあ、良いラッピングのアイデア。多くのパラメータに応じて、大きくても小さくてもかまいません。 – moala

関連する問題