Мне нужно создать C ++ MFC DLL с помощью Visual Studio 2008. Чтобы сделать это, я создал проект DLL MFC Win32 Console в Visual Studio и создал функцию, которая создает объект и использует его метод для печати строки на экране. Вроде как это:
__declspec(dllexport) void Foo(void);
где:
void Foo(void){
print* obj = new print;
obj->testPrint();
return;
}
void print::testPrint(void){
printf("Bar\n");
return;
}
Он успешно компилируется и генерирует DLL, но когда я пытаюсь использовать его, я всегда получаю:
«ошибка LNK2019: неразрешенный внешний символ» void __cdecl Foo (void) «
Я попытался использовать Dependency Walker, и он не показывает какую-либо функцию в DLL. Я делаю что-то неправильно? Я много искал и до сих пор не получил никаких выводов из того, что может происходить.
Похоже, вы, возможно, не включили заголовочный файл, который определяет экспорт в любом файле cpp. Помните, что файлы cpp являются единственными фактически скомпилированными. Поэтому убедитесь, что вы включили заголовок с __declspec(dllexport) void Foo(void);
хотя бы в одном файле cpp. Также убедитесь, что в вашем проекте Linker-> Input settings не указан файл определения модуля (def).
Не пытайтесь связываться с DLL, пока обходчик зависимостей не покажет, что что-то действительно экспортировано.
По умолчанию в Windows используется cdecl, поэтому вам нужно явно указать, что он экспортировал declspec в вызывающей программе, или вместо этого экспортировать его из DLL как cdecl.
Вам нужно экспорт символ явно из файла CPP также:
__declspec(dllexport)
void Foo(void)
{
print* obj = new print;
obj->testPrint();
return;
}
Спецификация в заголовке предназначена только для клиента (EXE) и является подсказкой для компоновщика с сервера (DLL).