我需要在加载代码时注册类。只要代码在应用程序中编译,我实现了一个很好的解决方案。
但是当代码由静态库提供时,它根本不起作用。
我以类似于此答案的方式解决了这个问题: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 中的代码?
编辑:看来我的问题与Visual Studio 中关于静态链接的问题直接相关。看来我自己的库也有同样的问题。我注意到库中的一些类已注册。他们只是将他们的.h
文件包含在我的项目中的人。
那么有没有办法在不链接到.h
文件的情况下在 lib 中执行代码?