VB6で使用するためにC++でDLLを作成しています。そのため、DLLにはコンストラクタを呼び出すことができません(this discussionによる)。しかし、クラスのインスタンスを内部的に維持する必要があります。そのため、オブジェクトをグローバル変数として保持し、グローバル関数からコンストラクタを呼び出し、その後、別のグローバル関数を使用してオブジェクトのメソッドを呼び出します。C++ DLLの初期状態を格納する方法/初期化されていない変数を認識する方法
私は、多分一つの関数で十分だろうという考えを持っていました。グローバル変数にインスタンスが存在するかどうかをチェックし、そうでなければオブジェクトを作成し、オブジェクトのメソッドを呼び出します。現在、メソッドをすぐに呼び出す)
インスタンスがすでに作成されているかどうかを確認するにはどうすればよいですか?宣言にグローバル変数に値を割り当てることはできません。また、C++で保証されているデフォルト値はありませんが、わかっている限りです。
私の質問:これはとにかく可能ですか?
また、BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
関数を使用して変数を初期化することはできますか?もしそうなら、誰かがul_reason_for_call
のケースとまったく同じで、リンクされた例のようにVB6がDLLをロードするときに自動的に呼び出されるものを教えてくれますか?
私はDllMainでそれをしません。しかし、クラスの静的メンバーをラップするヘルパークラスを使用して、VB6で呼び出されるすべてのグローバル関数がそのインスタンスを処理できないのはなぜですか? –
@Sasha:それでも、私はそのメソッドにアクセスする前にインスタンスを作成する必要があるということを意味していませんか?少し具体的にしてください、私はかなり理解していません! –
下記の私の答えを参照してください。 –