У меня есть тестовая dll. После события в dll я хочу использовать функцию обратного вызова из dll в exe.функция вызова из dll в exe C++
test.dll .h
extern "C" __declspec(dllimport) int __stdcall getSum(int , int);
extern "C" __declspec(dllexport) int __stdcall callSum(int , int);
.cpp
int callSum(int a, int b)
{
return getSum(a, b);
}
myexe .cpp
extern "C" __declspec(dllexport)
int __stdcall getSum(int a, int b)
{
return a + b;
}
typedef int(__stdcall * callSumFn)(int a, int b);
и нагрузки
hLib=LoadLibrary(L"test.dll");
if(hLib==NULL)
{
...
return -1;
}
callSumFn callSum = (callSumFn)GetProcAddress(hLib, L"[email protected]");
if (!callSum)
{
//cerr << "Failed to get function address" << endl;
FreeLibrary(hLib);
return 1;
}
callSum(3, 4);
Ошибка:
Error 18 error LNK2019: unresolved external symbol __imp_getSum referenced in function callSum test.obj test
с test.dll компиляции
что не так? Может быть, есть лучший способ? Спасибо.
Файл .h поврежден, он объявляет getSum() как '__declspec (dllexport)'. Это верно только тогда, когда вы создаете DLL, это не может быть правдой при создании теста. Тогда это 'dllimport'. Использование макроса для выбора между двумя является шаблоном. –
После того, как вы связали myexe.exe, вы должны были получить файл «myexe.lib». Добавьте это к вам linker command of test.dll. – ssbssa