DLL.h
#pragma once
#ifdef _WIN32
# ifdef BUILDING_MY_LIB
# define MY_EXPORT __declspec(dllexport)
# else
# define MY_EXPORT __declspec(dllimport)
# endif
#else
# define MY_EXPORT __attribute__ ((visibility ("default")))
#endif
// declare as dll method
MY_EXPORT void passDTMFToClient(int id, DTMF_01 packet);
Убедитесь, что заголовок включен как вами dll.cpp, так и exe.cpp.Убедитесь, что в вашей dll-сборке вы определяете 'BUILDING_MY_LIB' при компиляции в Windows.При компиляции dll вы также должны получить библиотеку ссылок (например, у вас есть mydll.dll и mydll.lib на окнах).
Теперь вашему exe-файлу просто нужно включить dll.h и ссылку наmydll.lib (или mydll.so в Linux).Если ваше приложение может найти DLL, оно будет автоматически загружено.
Если вы хотите пойти еще дальше и загрузить dll на лету в свой exe, вы, вероятно, захотите изменить прототип функции на:
MY_EXPORT extern "C" void passDTMFToClient(int id, DTMF_01 packet);
, который отключит имяковеркание.Вы должны быть в состоянии открыть DLL, используя LoadLibrary для Windows или dlopen в Linux.например,
// on windows
HMODULE dllHandle = LoadLibrary("mydll.dll");
// on linux
void* dllHandle = dlopen("mydll.dll", RTLD_NOW);
Вам понадобится указатель на функцию, например,
// typedef func type
typedef void (*passDTMFToClient_func)(int, DTMF_01);
// the function pointer
passDTMFToClient_func passDTMFToClient = 0;
Затем вам просто нужно получить адрес символа, который вы так делаете в Windows:
passDTMFToClient = (passDTMFToClient_func)GetProcAddress(dllHandle, "passDTMFToClient");
И так же в Linux:
passDTMFToClient = (passDTMFToClient_func)dlsym(dllHandle, "passDTMFToClient");
И когда вы закончите работу с DLL, вы можете снова закрыть ее:
// windows
FreeModule(dllHandle);
// linux
dlclose(dllHandle);