Неразрешенная ошибка внешнего символа, библиотека C++ VS15 d3dx9

по какой-то причине я получил ошибку «неразрешенный внешний символ», и я просто не могу понять, почему..

Он жалуется на "__snprintf", "__sprintf" и "__vsnprintf", хотя я их даже не использую.

Изображение компилятора:

введите здесь описание изображения

Как вы можете видеть, я использую d3dx9.lib, и это мои библиотеки:

#include <Windows.h>
#include <iostream>
#include <stdio.h>

#include "d3d9.h"
#include "d3dx9.h"
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

Единственный код, в котором я использую printf:

void v_DrawText(int X, int Y, D3DCOLOR Color, ID3DXFont *font, const char* sText, ...)
{
     char sText_[1024] = "";
     va_list ap;

     if (!sText || *sText == '\0')
        return;

     va_start(ap, sText);
     _snprintf_s(sText_, 1024, 1023, sText, ap);
     va_end(ap);

     RECT Position = { X, Y, X + 500, Y + 50 };
     font->DrawText(NULL, sText_, -1, &Position, DT_LEFT | DT_WORDBREAK, Color);
}

Я уже пытался перестроить решение с нуля, повторно загрузить библиотеку, добавить ее напрямую в компоновщик... но нет. Просто не получится..

Конфигурация проекта (по запросу):

введите здесь описание изображения


person Alfanan123    schedule 02.11.2015    source источник
comment
Покажите конфигурацию вашего проекта, пожалуйста.   -  person πάντα ῥεῖ    schedule 02.11.2015
comment
Этот каталог SDK выглядит очень сломанным с файлом %28. Попробуйте изменить это на Program Files (x86). Если у вас возникают те же проблемы при запуске нового проекта, вам необходимо исправить установку SDK.   -  person MicroVirus    schedule 02.11.2015
comment
похоже, что он не связан с правильной библиотекой. это ссылка на среду выполнения msc++?   -  person DTSCode    schedule 02.11.2015
comment
Да, это так. @DTSCode   -  person Alfanan123    schedule 02.11.2015
comment
Не имеет никакого значения. @MicroVirus   -  person Alfanan123    schedule 02.11.2015
comment
Какая часть конфигурации проекта? ????????????????   -  person Alfanan123    schedule 02.11.2015
comment
Работайте в обратном направлении от первых принципов. Посмотрите в своем журнале сборки, чтобы увидеть полную командную строку ссылки. Убедитесь, что вы действительно связываетесь с версией среды выполнения C/C++, которая предоставляет эти символы. Определите библиотеку, содержащую среду выполнения C. Используйте dumpbin, чтобы убедиться, что библиотека ссылок для среды выполнения C содержит символы.   -  person legalize    schedule 03.11.2015
comment
Попробуйте добавить legacy_stdio_definitions.lib в качестве дополнительной зависимости в настройках ввода компоновщика.   -  person cremno    schedule 03.11.2015
comment
см. stackoverflow.com/questions/32418766/   -  person cremno    schedule 03.11.2015


Ответы (1)


Имейте в виду, что D3DX9D3DX10, D3DX11) и DirectX SDK устарели. См. MSDN. VS 2010 была последней версией, официально поддерживаемой D3DX9 с DirectX SDK (июнь 2010 г.). В целом библиотеки импорта должны работать, но статические библиотеки, скорее всего, не будут работать.

Обратите внимание, что DXERR.LIB не работает с VS 2015, поскольку CRT изменился. Подробнее см. в этой теме.

Вы по-прежнему используете DirectX SDK 9.0b от лета 2004 г., который в то время поддерживал VS .NET 2002 и VS .NET 2003. Если вам все еще нужно использовать устаревший D3DX9, перейдите на выпуск DirectX SDK (июнь 2010 г.). См. это сообщение.

Кроме того, у вас неправильно настроены пути include/lib для смешивания устаревшего SDK DirectX с SDK Windows 8.x, который поставляется с VS 2012 или более поздней версии. См. инструкции на MSDN для правильного порядка пути. который является обратным тому, что у вас есть сейчас.

person Chuck Walbourn    schedule 05.11.2015