Итак, я начинаю понимать, что 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...
вы не экспортировали функцию ….. программе не разрешен доступ к функции в 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
сделать это для любой функции-члена класса, которую вы хотите экспортировать
это пример