Экспорт неокрашенного имени функции

Я прочитал несколько статей здесь по поводу искажения / украшения имен и продолжаю сталкиваться с несоответствиями, поэтому я решил задать довольно сфокусированный вопрос и посмотреть, что произойдет.

Я пытаюсь продвинуться вверх по кривой обучения, чтобы в конечном итоге иметь возможность создать dll в VS2013, которая будет использоваться кодом, сгенерированным на очень старом компиляторе Borland C ++. Первым шагом является создание exe и dll в VS2013, которые могут «говорить». Я хочу неукрашенные имена функций. Итак, я создал DLL с одной экспортированной функцией.

extern "C" __declspec(dllexport) int __cdecl BasicFileOpen(void);

Мое ограниченное понимание:

  1. extern «C» означает отсутствие украшения
  2. __declspec (dllexport) означает экспорт функции
  3. __cdecl указывает вызывающую подпись (как параметр помещается в стек и т. д.)

Когда я проверяю 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

1

Решение

Задача ещё не решена.

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


По вопросам рекламы [email protected]