我有一个在运行时加载的DLL. DLL依赖于内部工作的静态变量(它是一个std :: map),这个变量在DLL中定义.
当我在加载后从DLL调用第一个函数时,我从DLL获得了一个SegFault,从未初始化地图.从我从DLL加载中读取的所有内容,静态和全局数据初始化应该在调用DLLMain之前发生.
为了测试静态初始化,我添加了一个打印出消息的静态结构,甚至还提供了一个断点以便进行测量.
static struct a { a(void) { puts("Constructing\n"); } }statica;
这是我的加载代码:
dll = LoadLibrary("NetSim"); //Error Handling ChangeReliability = reinterpret_cast<NetSim::ChangeReliability> (GetProcAddress(dll,"ChangeReliability")); ChangeReliability(100);
我已经验证了dll版本是正确的,多次重建整个项目,但没有区别.我是新鲜的想法.