C++ 在C+中使用DLL+;项目

C++ 在C+中使用DLL+;项目,c++,dll,C++,Dll,有一个包含文档的DLL库,但没有头文件。在C++程序中有没有使用库函数的简单方法?如何使用代码块引用DLL?提前感谢。以下是动态加载dllSample.dll并在其中使用add函数的示例 typedef int(u stdcall*dllAdd)(int,int) intmain() { HINSTANCE dllInstant; dllAdd-Add; dllInstant=LoadLibrary(_T(“dllSample.dll”); 如果(dllInstant) { Add=(dllAd

有一个包含文档的DLL库,但没有头文件。在C++程序中有没有使用库函数的简单方法?如何使用代码块引用DLL?提前感谢。

以下是动态加载dllSample.dll并在其中使用add函数的示例

typedef int(u stdcall*dllAdd)(int,int)

intmain()
{
HINSTANCE dllInstant;
dllAdd-Add;
dllInstant=LoadLibrary(_T(“dllSample.dll”);
如果(dllInstant)
{
Add=(dllAdd)GetProcAddress(dllinstat,“Add”);
如果(添加)
{

cout只要您有导出DLL函数的文档,就不需要头文件(甚至不需要导入库),但您确实需要了解所调用函数的各个方面

文件应包括

  • 函数名
  • 函数参数类型
  • 返回类型
  • 调用约定(
    \uu stdcall
    \uu cdecl
    等)
  • 获得此信息后,就可以调用导出的DLL函数了

    例如,假设其中一个导出函数返回一个
    LONG
    ,并将2
    DWORD
    s作为参数。调用约定为
    \uu stdcall
    。函数名为“Func1”

    #包括
    #包括
    typedef LONG(u stdcall*MyFunc)(DWORD,DWORD);
    int main()
    {
    //加载DLL
    HMODULE hMod=LoadLibrary(_T(“MyDLL.dll”);
    if(hMod)//检查DLL是否已成功加载
    {
    德沃德arg1=10;
    德沃德arg2=20;
    长返回值;
    //获取函数
    MyFunc fn=(MyFunc)GetProcAddress(hMod,“Func1”);
    //确保函数存在
    如果(fn)
    return_value=fn(arg1,arg2);//调用函数
    //...
    //...
    //如果不再需要,请卸载DLL
    免费图书馆;
    }
    }
    
    请注意对
    LoadLibrary
    GetProcAddress
    FreeLibrary
    的调用。要成功调用导出的DLL函数,您需要熟悉这些Windows API函数

    还要注意确保库成功加载、函数存在等的检查

    文档链接:


    使用loadlibrary加载dll,使用GetProcAddress获取指向函数的指针。
    int main()
    {
        HINSTANCE dllInstant;
        dllAdd Add;
    
        dllInstant = LoadLibrary(_T("dllSample.dll"));
        if(dllInstant)
        {
            Add = (dllAdd)GetProcAddress(dllInstant, "add");
            if(Add)
            {
               cout<<Add(3,4);
            }
       }
    
       getch();
    }
    
    #include <windows.h>
    #include <tchar.h>
    
    typedef LONG (__stdcall *MyFunc)(DWORD, DWORD);
    int main()
    {
       // Load the DLL
       HMODULE hMod = LoadLibrary(_T("MyDLL.dll"));  
    
       if ( hMod )  // check if DLL was loaded successfully
       {
           DWORD arg1 = 10;
           DWORD arg2 = 20;
           LONG return_value;
    
           // get the function
           MyFunc fn = (MyFunc)GetProcAddress(hMod, "Func1");
    
           // make sure function exists
           if ( fn )
              return_value = fn(arg1, arg2);  // call the function
           //...
           //...
           // unload the DLL if no longer needed
           FreeLibrary( hMod );
        }
    }