VS2013 Имя компилятора C ++ Mangling, определенное с помощью extern & quot; C & quot;

Я пытаюсь создать консольное приложение WIN32, которое использует текущую статическую библиотеку 2td.2xx.lib из FTDI. Я использую VS2013 и родной неуправляемый C ++. Мой звонок выглядит так.

#include "../ftd2xx.h". . .
DWORD port_count = 0;
FT_STATUS status = FT_OK;
status = FT_CreateDeviceInfoList(&port_count);

Когда я компилирую, я получаю ошибку ссылки

GetTopazVCP.obj : error LNK2019: unresolved external symbol __imp__FT_CreateDeviceInfoList@4 referenced in function "unsigned long __cdecl Get1stVirtualComPort(unsigned long *)" (?Get1stVirtualComPort@@YAKPAK@Z)

Неразрешенный символ __imp__FT_CreateDeviceInfoList @ 4 представляется искаженной версией названия FT_CreateDeviceInfoList функция. Так что это не разрешается в ftd2xx.lib, который использует C-имена. Что я не понимаю, так это то, почему компилятор исказил имя, когда файл ftd2xx.h имеет условный код «C»

#ifdef __cplusplus
extern "C" {
#endif
. . .
FTD2XX_API
FT_STATUS WINAPI FT_CreateDeviceInfoList(
LPDWORD lpdwNumDevs
);
...
#ifdef __cplusplus
}
#endif

завернуть все FT _ ??? деклараций. Я подтвердил, что __cplusplus определяется во время компиляции. Есть идеи, что вызывает неожиданное искажение имени?

0

Решение

Как отметил в своем комментарии ChronoKitsune, здесь нет никакого искажения имени. Проблема заключалась в том, что я связывал статическую версию библиотеки FTDI, но по умолчанию для заголовочного файла ftd2xx.h объявляется FT _ ??? функционирует как вызовы версии DLL. Когда я заменил статическую версию ftd2xx.lib на DLL-версию ftd2xx.lib, она была успешно построена. FTDI предоставляет только одну версию заголовка ftd2xx.h и, присмотревшись к ней, я обнаружил, что если вы хотите использовать статический ftd2xx.lib, вам нужно #define FTD2XX_STATIC, прежде чем включать ftd2xx.h

#define FTD2XX_STATIC
#include "ftd2xx.h"
0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector