вызов другой функции в DLL вызывает нарушение прав доступа

Итак, я начинаю понимать, что dll не самая простая вещь для понимания, я пытаюсь сделать dll, которая совместима с VC6, я получил некоторый код, работающий в VS2010, но пытаясь понять, как его получить код для работы для проекта VC6 Я обнаружил следующую проблему:

Мой звонок в dll выглядит так

MyDll::connect();

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

VOID connect()
{
hello();    //0xC0000005: access violation
}

VOID hello()
{
int i = 1;
}

разборка выглядит так:

->  00000000   ???
00000001   ???
00000002   ???
00000003   ???
00000004   ???
00000005   ???
00000006   ???
00000007   ???
00000008   ???
00000009   ???
etc...

0

Решение

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

чтобы экспортировать функцию внутри класса, эта функция должна
1- быть публичным членом
2- быть статичным членом

class MyDll{
public:
static void connect();
}
//then redeclare it like this
#ifdef _cplusplus
extern "C"{
#endif
__declspec(dllexport) void  MyDll::connect(){
//TODO
}
#ifdef _cplusplus
}
#endif

сделать это для любой функции-члена класса, которую вы хотите экспортировать

это пример

Создание простого примера библиотеки динамических ссылок

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector