2015-06-26 3 views
-2

Имейте библиотеку DLL с документацией, но не имеет файла заголовка. Есть ли простой способ использовать функциональность библиотеки в программе на C++? - Как мне связать DLL с CodeBlocks? Заранее спасибо.Использование DLL в проекте C++

+1

Использование LoadLibrary для загрузки dll и GetProcAddress, чтобы получить указатель на эту функцию. – cup

ответ

0

Вот пример, который динамически загружает dllSample.dll и использует в нем функцию добавления.

typedef int (__stdcall * dllAdd) (int, int);

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(); 
} 
1

До тех пор, пока у вас есть документация для экспортируемых функций DLL, вам не нужен файл заголовка (или даже библиотека импорта), но вы должны знать аспекты функции вы звоните.

документация должна включать в себя

  1. Название функции
  2. Функциональные типы аргументов
  3. Возвращаемый тип
  4. соглашение о вызовах (__stdcall, __cdecl и т.д.)

После того как вы это информации, у вас есть то, что вам нужно для вызова экспортированной DLL-функции.

Так, например, предположим, что одна из экспортируемых функций возвращает LONG и принимает в качестве аргументов 2 DWORD s. Вызывающим соглашением является __stdcall. Имя функции - «Func1»;

#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); 
    } 
} 

Обратите внимание на вызовы LoadLibrary, GetProcAddress и FreeLibrary. Это функции Windows API, с которыми вам нужно ознакомиться, чтобы успешно вызывать экспортированные функции DLL.

отметить также проверки, чтобы убедиться, что библиотека загружает успешно, функция существует, и т.д.

Ссылки на документы:

LoadLibrary

FreeLibrary

GetProcAddress

Смежные вопросы