неразрешенный внешний символ из-за искажения имени

Я сталкиваюсь с ошибкой компоновщика для функции XERCES при обновлении с 2.6 до 2.8

unresolved external symbol (?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QBG0@Z)

Я проверил xerces-c_2.8.lib и обнаружил, что имя lib немного отличается от имени в моем файле .obj. Это как показано

?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QB_W0@Z

Поэтому я понимаю, что компоновщик не найдет ошибку совпадения и выброса.

Но я не могу понять, почему мой файл .obj содержит другую подпись.

код включает в себя правильные заголовочные файлы и lib от все еще неправильного имени.

Любая помощь будет оценена.

4

Решение

Вы можете использовать утилиту undname.exe для восстановления оригинальной декларации C ++.

?resolEntity @ HandlerBase @ xercesc_2_8 @@ UAEPAVInputSource @ 2 @ QBG0 @ Z преобразует в:

virtual class xercesc_2_8::InputSource *
__thiscall xercesc_2_8::HandlerBase::resolveEntity(
unsigned short const * const,
unsigned short const * const)

?resolEntity @ HandlerBase @ xercesc_2_8 @@ UAEPAVInputSource @ 2 @ QB_W0 @ Z преобразует в:

virtual class xercesc_2_8::InputSource *
__thiscall xercesc_2_8::HandlerBase::resolveEntity(
wchar_t const * const,
wchar_t const * const)

Обратите внимание на различия в типах аргументов, unsigned short против wchar_t, По какой-то причине ваш компилятор не распознает тип wchar_t. Это может быть потому, что у вас очень старый компилятор. Или это может быть неверно установленный параметр, на msvc это C / C ++, Language, «Обрабатывать wchar_t как Встроенный тип». Или у вас есть макрос, который переводит строковый тип в unsigned short.

13

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

C ++ допускает перегрузку функций, поэтому параметры функции записываются в календаре имен. Возможно, вы пытаетесь вызвать функцию с типами параметров, отличными от ожидаемых в DLL.

Убедитесь, что ваш заголовочный файл соответствует версии вашей DLL.

0

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