【发布时间】:2016-08-12 23:12:10
【问题描述】:
项目编译成dll注入可执行文件
该项目依赖于一开始就在 main() 中初始化的 API,如下所示:
int DLL_main()
{
TheApi::Initialize();
AnObject anObjectInstance;
//..
}
有一个对象是用类似这样的类定义构造的:
class AnObject()
{
AnObject();
~AnObject();
static ApiHelper apiHelperObject; //This object assists in making certain api features easier to use
}
//Inside AnObject.cpp
ApiHelper AnObject::apiHelperObject;
apiHelperObject的构造函数中,有一些API函数调用
注入 dll 后,什么也没有发生(也没有错误消息),但是,
当从apiHelperObject 中删除静态关键字时,一切正常
问题似乎是在 API 初始化之前 构造了静态成员
不可能在apiHelperObject的构造函数中调用TheApi::Initialize(),因为有多个不同的api辅助对象,这会导致TheApi::Initialize()被多次调用
所以问题是:
在构造静态成员对象之前初始化 api 的最佳方法是什么?或者,延迟静态成员构建的最佳方法是什么?
最好不要使用指针,因为语法不是特别受欢迎
谢谢
【问题讨论】:
-
“问题似乎是在 API 初始化之前正在构造静态成员” 为什么不呢?它是命名空间静态的。它在其他任何事情发生之前被初始化。停止使用“初始化”函数并正确使用构造函数。
-
为 type-o 道歉,它不是一个函数声明,已编辑。 api不是我的,必须调用初始化函数
标签: c++ constructor static delay