Я прочитал несколько статей здесь по поводу искажения / украшения имен и продолжаю сталкиваться с несоответствиями, поэтому я решил задать довольно сфокусированный вопрос и посмотреть, что произойдет.
Я пытаюсь продвинуться вверх по кривой обучения, чтобы в конечном итоге иметь возможность создать dll в VS2013, которая будет использоваться кодом, сгенерированным на очень старом компиляторе Borland C ++. Первым шагом является создание exe и dll в VS2013, которые могут «говорить». Я хочу неукрашенные имена функций. Итак, я создал DLL с одной экспортированной функцией.
extern "C" __declspec(dllexport) int __cdecl BasicFileOpen(void);
Мое ограниченное понимание:
Когда я проверяю dll, используя DependencyWalker или Dumpbin / EXPORTS, имя функции не украшено. Ура.
Вот код в exe, который пытается вызвать экспортированную функцию в dll:
void CCallsCIDdllDlg::OnBnClickedOk()
{
int iRetVal = BasicFileOpen();
// TODO: Add your control notification handler code here
CDialogEx::OnOK();
}
Тем не менее, когда я пытаюсь построить EXE, я получаю ошибку компоновщика.
error LNK2019: unresolved external symbol _BasicFileOpen referenced in function
"public: void __thiscall CCallsCIDdllDlg::OnBnClickedOk(void)"(?OnBnClickedOk@CCallsCIDdllDlg@@QAEXXZ)
Обратите внимание, что exe упоминает _BasicFileOpen.
Я озадачен этим.
Я правильно указал на файл lib, созданный сборкой dll.
Я включаю файл заголовка для функции dll в exe.
Почему компоновщик не понимает имя экспортируемой функции?
Почему кажется, что имя функции оформлено?
Кстати, использование файла .def, похоже, не имеет никакого значения.
Любые комментарии приветствуются.
MBB
Задача ещё не решена.