1

我有一个名为Lib.ddl. 在 dll 中,我有一个名为 add 的函数,它接受一个整数作为参数。

使用 windows API 并使用以下类。

class WindoswAPI
{
    public:
         WindowsAPI();//constructor 
         //helper functions
         ~WindowsAPI();
    private:
}

如何在类的构造函数中加载这个库。通过辅助函数提取函数,并在析构函数中卸载函数?我在互联网上寻找解决方案和帮助,但我找不到任何解决方案。

4

2 回答 2

1

您应该首先查看LoadLibraryEx()以便在您的进程中加载​​ dll,然后您可以使用GetProcAddress()通过名称获取指向函数的指针。请注意,HMODULE从第二个函数请求的参数由第一个函数返回。您必须仔细了解函数签名才能在不引起 GPF 的情况下调用它,因此如果您必须在它工作之前进行一些调试,请不要感到惊讶。无论如何,要检查的第一件事是两个函数的返回值:第一个应该返回不同于零的值(它实际上返回加载 dll 的虚拟地址),如果它返回NULL,使用GetLastError有一些提示。同样对于GetProcAddress,如果它返回零,则某些东西不起作用,通常是函数名的拼写错误。正如我在返回地址之前所说的,GetProcAddress并不能保证您已经完成:您必须完全知道如何调用该函数。如果您在发现从 dll 中公开的名称方面需要帮助,您会发现有用的 DUMPBIN.EXE,您应该已经可以从 Visual Studio 工具命令提示符处获得它。当您的代码完成 dll 后,您可以尝试使用FreeLibrary()将其卸载。

于 2012-11-06T11:21:40.887 回答
1

查看POCO C++ Libraries,它包含非常好的来自DLL-Loader的交叉平台,以避免手写变通方法和样板。

于 2012-11-06T11:27:42.437 回答