[英]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.