繁体   English   中英

使用指向明确加载的DLL函数的静态指针创建类

[英]Creating a class with static pointers to explicitly loaded DLL functions

我想拥有一个DLLInterface类的多个实例,但是由于每个对象都具有指向相同DLL函数的指针,因此我希望它们是静态的。

以下代码无法编译。 (我确实有理由需要多个实例包含相同的指针,下面的精简代码并未说明这些实例。)

//Header file:

typedef void (*DLLFunction)();
class DLLInterface
{
private:
    static HINSTANCE hinstDLL;
public:
    static DLLFunction Do;

    DLLInterface()
    {
        if(!hinstDLL || !Do)
        {
            hinstDLL = LoadLibrary("DoubleThink.dll");
            Do = (DLLFunction)GetProcAddress(hinstDLL, "Do");
        }
    }
};

我还需要将所有代码包含在此头文件中。 (我知道我可以通过将以下语句添加到EXE的cpp文件中来使其编译,但是我需要避免这样做。

HINSTANCE DLLInterface :: hinstDLL = 0;

谢谢!

我能想到的一个技巧是使用模板。 想法是让包含静态数据的类成为模板类,然后从该类派生具有某些特定类型的实际类:

template <class T>
class DLLInterfaceImpl;
{
private:
    static HINSTANCE hinstDLL;
public:
    static DLLFunction Do;
};

template <class T>
HINSTANCE DllInterfaceImpl<T>::hInstDLL;

template <class T>
DLLFunction DllInterfaceImpl<T>::Do;

class DllInterface : public DllInterfaceImpl<int>
{
};

由于DllInterfaceImpl是模板,因此可以将静态定义放在头文件中,编译器将执行一些“技巧”,以便多个定义不会导致链接失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM