静的メンバオブジェクトの構造は、実行中に注入されるプロジェクト)は(主に非常に開始時に初期化されているAPIに依存しているようなので遅延プロジェクトは、DLLにコンパイルされる
:
int DLL_main()
{
TheApi::Initialize();
AnObject anObjectInstance;
//..
}
これと同様のクラス定義で構成されているオブジェクトがある:apiHelperObject
のコンストラクタにおいて
class AnObject()
{
AnObject();
~AnObject();
static ApiHelper apiHelperObject; //This object assists in making certain api features easier to use
}
//Inside AnObject.cpp
ApiHelper AnObject::apiHelperObject;
は、いくつかありますstaticキーワードはapiHelperObject
から削除されたときにAPI関数は、DLLの注入の際に
を呼び出して、何も起こりません(エラーメッセージも同様)しかし、 はすべて
問題は静的メンバであることのようです正常に動作しません前にAPIを構築していると、複数の異なるAPIヘルパーオブジェクトがあるので、apiHelperObject
のコンストラクタでTheApi::Initialize()
を呼び出すことはできません、そしてそれはTheApi::Initialize()
が複数回呼び出される原因となる
を初期化され
それで質問は次のとおりです。
静的メンバオブジェクトが構築される前にAPIを初期化する最良の方法は何ですか?または、静的メンバーの作成を遅らせる最善の方法は何ですか?
構文は特に
もしあなたは常にアクセサ関数にそれが地元することによってstatic
オブジェクトの初期化を遅らせることができ++、通常、標準のCでは
_「この問題は、APIが初期化される前に静的メンバーが構築されているようです」_なぜそうではありませんか?これは静的な名前空間です。それは何かが起こる前に初期化されます。 「初期化」関数の使用をやめ、コンストラクターを適切に使用してください。 –
タイプoの謝罪、それは編集された関数宣言ではありませんでした。 APIは私のものではなく、初期化関数を呼び出さなければなりません – linko13