2012-11-06 43 views
1

我有一个名为Lib.ddl的DLL。在dll中,我有一个名为add的函数,它将一个整数作为参数。从C++中提取DLL

使用Windows API并使用以下类。

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

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

+2

你真的需要动态加载它吗?绑定到DLL的通常方法是'#include'它的头部并链接到它的导入库。 –

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682599(v=vs.85).aspx – Bart

+0

为了动态加载函数,您需要阅读LoadLibrary和GetProcAddress我想。 – Abhineet

回答

1

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

1

看看POCO C++ Libraries,它包含非常好的交叉点从DLL-Loader,以避免手写变通办法和样板。

+1

+1很高兴知道有一个优雅的交叉平台解决方案。 –