Имейте библиотеку DLL с документацией, но не имеет файла заголовка. Есть ли простой способ использовать функциональность библиотеки в программе на C++? - Как мне связать DLL с CodeBlocks? Заранее спасибо.Использование DLL в проекте C++
ответ
Вот пример, который динамически загружает 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();
}
До тех пор, пока у вас есть документация для экспортируемых функций DLL, вам не нужен файл заголовка (или даже библиотека импорта), но вы должны знать аспекты функции вы звоните.
документация должна включать в себя
- Название функции
- Функциональные типы аргументов
- Возвращаемый тип
- соглашение о вызовах (
__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.
отметить также проверки, чтобы убедиться, что библиотека загружает успешно, функция существует, и т.д.
Ссылки на документы:
- 1. Использование c DLL в проекте C++
- 2. Использование COM-dll в проекте C#
- 3. Использование STL в проекте DLL C++
- 4. Использование управляемой dll (которая использует неуправляемую dll) в проекте C#
- 5. Использование Obfuscated dll в качестве ссылки в проекте C#
- 6. Создание и использование DLL в том же проекте в C#
- 7. Использование C++ dll в C#
- 8. Невозможно перезагрузить C++ dll в проекте C#
- 9. using C# dll в проекте C++
- 10. Использование неподписанных DLL в подписанном проекте
- 11. Использование COM dll в C#
- 12. Использование пакета C++ nuget в проекте C#
- 13. Использование DLL в C
- 14. Использование DLL в C#
- 15. Включая внешние DLL-зависимости в проекте dll?
- 16. Используйте поставляемую dll в проекте Visual C++
- 17. обновленная dll не вызывается в проекте C#
- 18. Невозможно использовать dll C++ в проекте vb.net
- 19. Использование C++ DLL typedif в C#
- 20. Использование функций vb6 в проекте C#
- 21. Использовать проект библиотеки C++ DLL в проекте C++/CLR
- 22. Использование Sox.exe в проекте C#
- 23. Использование MediaInfo.dll в проекте C#
- 24. C#: Использование ссылки DLL
- 25. Использование библиотеки C * .so в проекте C++ (Ubuntu) Использование библиотеки C * .so в c проекте (ubuntu)
- 26. Visual Studio 2012: Использование MASM x64 в DLL-проекте
- 27. Использование Delphi DLL в C#
- 28. Использование C++ DLL в браузере
- 29. Использование библиотеки DLL в C#
- 30. Использование C++ DLL в Python
Использование LoadLibrary для загрузки dll и GetProcAddress, чтобы получить указатель на эту функцию. – cup