Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DLL中的静态数据被初始化,然后不再是静态数据_C++_Dll - Fatal编程技术网

C++ DLL中的静态数据被初始化,然后不再是静态数据

C++ DLL中的静态数据被初始化,然后不再是静态数据,c++,dll,C++,Dll,我在代码中遇到了一个非常奇怪的问题。。。我现在已经花了整整一个下午的时间,对这件事毫无头绪。但也许有人能告诉我我做错了什么 因此,对于解释: 我有一个动态链接库 其中我有两门课: class Plugin { public: Plugin() : isInited(false) { all_plugins.push_back(this); } virtual ~Plugin() { } virtual int OnInit(ONINIT_PARAMS) {

我在代码中遇到了一个非常奇怪的问题。。。我现在已经花了整整一个下午的时间,对这件事毫无头绪。但也许有人能告诉我我做错了什么

因此,对于解释:

我有一个动态链接库

其中我有两门课:

class Plugin {
public:
    Plugin() : isInited(false) { all_plugins.push_back(this); }
    virtual ~Plugin() { }

    virtual int OnInit(ONINIT_PARAMS)       { return 0; }
    virtual void OnDeInit(ONDEINIT_PARAMS)  { }
    virtual int OnTick(ONTICK_PARAMS)       { return 0; }

private:
    static std::vector<Plugin*> all_plugins;

private: // NO COPY CLASS
    Plugin(const Plugin&);
    const Plugin& operator=(const Plugin&);
};

并在C++文件中实现:

static class InMarket _InMarket;
我跟踪了它,正确地调用了构造函数。并插入Plugin::所有插件

然后继续跟踪,我看到模块(2当前,例如,就像下一个例子中的(C++文件)):

我看到这些模块也很好地插入到DynamicModule::all_模块中。 但同时当我看到这一点时,我也注意到Plugin::all_plugins有一个{size=0}

然后,当我输入OnInit()函数时,我看到所有的\u模块的大小都是2,所有的\u插件都是0。即使所有的构造函数都被调用了

我将我的库加载为:

HMODULE plugin = LoadLibrary(pluginFilename.c_str());
所有静态对象构造函数都称为。。。。 我看不出这两件事之间有什么区别

这是怎么回事?

每个插件都有自己的all_modules变量。他们无法链接plugin.cpp。必须只有一个,它属于主机。@HansPassant all_modules变量是在DynamicModule中定义的静态变量。至于定义。我只需要把它放在C++文件中的某个地方。我把它放在Plugin.cpp中,当然我可以创建一个DynamicModule.cpp并把它放在那里,但那根本没关系。不?每个插件都有自己的all_modules变量。他们无法链接plugin.cpp。必须只有一个,它属于主机。@HansPassant all_modules变量是在DynamicModule中定义的静态变量。至于定义。我只需要把它放在C++文件中的某个地方。我把它放在Plugin.cpp中,当然我可以创建一个DynamicModule.cpp并把它放在那里,但那根本不重要不?
class InMarket : public Plugin {
public:
    int OnInit   (ONINIT_PARAMS);
    void OnDeInit(ONDEINIT_PARAMS);
    int OnTick   (ONTICK_PARAMS);

private:
};
static class InMarket _InMarket;
static class MQL4Trade : public DynamicModule {
public:
    virtual int OnLoad() {
        __OrderSend   = (_OrderSend)GetProcAddress(exe, "OrderSend");
        __OrdersCount = (_OrdersCount)GetProcAddress(exe, "OrdersCount");
        return 0;
    }
} _MQL4Trade;
HMODULE plugin = LoadLibrary(pluginFilename.c_str());