コードの読み込み時にクラスを登録する必要があります。コードがアプリでコンパイルされている限り、うまく機能するソリューションを実装しました。
ただし、コードが静的ライブラリによって提供されている場合は、まったく機能しません。
私はこの答えと同様の方法でこの問題を解決しました:https ://stackoverflow.com/a/729028/171711 。
現在、私は次のようなものを持っています:
#define REGISTER(className)\
static const int __classDescriptor##className = MyRegister(#className, className::GetAllocator());
使用すると、次のようになります。
//Foo.cpp
REGISTER(Foo);
Foo::Foo()
{
...
}
そして、私はログにあります:
registered class:Foo
しかし、静的ライブラリを作成し、Fooがライブラリによって提供された場合、問題はREGISTER(Foo);
呼び出されないことです。
スクリプトがこの動作に依存するネイティブC++クラスを使用できるようにするための複雑なロードシステムがあります。ライブラリがロードされたときにFoo.cppのコードを強制的に実行する方法はありますか?
編集:私の質問は、VisualStudioの静的リンクに関する質問に直接関連しているようです。自分のライブラリでも同じ問題があるようです。ライブラリのクラスのいくつかが登録されていることに気づきました。.h
そして、彼らは私のプロジェクトに彼らのファイルが含まれているものだけです。
それで、ファイルにリンクせずにライブラリ内のコードを実行する方法はあり.h
ますか?