gpt4 book ai didi

C++ 类来包装 loadlibrary?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:54 25 4
gpt4 key购买 nike

我在想如果有几个类来包装 LoadLibraryGetProcAddressLibraryFunction< 会很酷分别。当我在考虑这个时,我不确定它是否可能。这是我的想法:

类:

class Library
{
HANDLE m_handle;
public:
// Handles initializing the DLL:
Library(std::string name);
// Deinitializes the DLL
~Library();

HANDLE getHandle();
bool isInitialized();
}

Function 类:

class Function
{
public:
Function(Library& library, std::string name);


void* call(/* varg arguments? */) throw(exception);

bool isValid();
}

出现问题是因为我必须有参数的动态数据类型和多个长度才能传递给真正的函数指针。我可以通过在构造函数中指定它来绕过参数的多个长度并具有特定的方法,但是数据类型呢?

编辑:我已经根据答案创建了类供任何人在此处使用:https://github.com/ic3man5/ice--

最佳答案

您可以实现到函数指针的隐式转换。

template <typename Signature>
struct Function
{
Function(Library& library, std::string name)
{
m_func = reinterpret_cast<Signature *>(
::GetProcAddress(library.m_hModule, name.c_str()));
}
operator Signature *() { return m_func; }
private:
Signature * m_func;
};

按如下方式使用该类:

Function<int (int, double)> foo(library, "foo");
int i = foo(42, 2.0);

关于C++ 类来包装 loadlibrary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com