0

シングルトンを含む静的ライブラリがあります。テストの目的で、同じプロセスでこれらのシングルトンの個別のインスタンスをロードする必要があります。

そこで、同じ静的ライブラリをリンクするDLLを作成し、メインプロセスがそのDLLをロードします。

DLLを読み込もうとすると、シングルトンの静的インスタンスポインタにアクセスしようとすると、アクセス違反が発生します。

私が読んだいくつかの投稿は、それは不可能であり、2番目のプロセスが必要であると述べていますが、他の投稿は、各DLLが、リンクする静的ライブラリ内のすべての静的変数の独自のコピーを取得することを示しています。

私がやろうとしていることは可能ですか?

4

1 に答える 1

3

ほとんどの場合、シングルトンは実際には1つだけを意味します-あなたの要求は珍しいものです。

静的ライブラリをDLLにリンクすると、静的変数のインスタンスが複数発生する可能性があることを私は知っています。各DLLまたはEXEは、リンカーを介して静的ライブラリの独自のコピーを取得するため、静的変数の独自のコピーを取得します。

アクセス違反は、初期化順序の問題が原因である可能性があります。これを制御する最良の方法は、静的変数がグローバル変数ではなく、ジャストインタイムで初期化する関数内にあることを確認することです。

于 2012-09-19T02:23:43.703 に答える