2016-01-11 15 views
0

Я мигрировали проект Visual C++ в Visual Studio 2013. Когда я пытаюсь построить проект, компилятор возвращает следующую ошибку:Перенастройка Визуальный проект C++ в Visual Studio 2013 - DirectShow BASECLASSES ошибка C2169

Error 2 error C2169: '_InterlockedIncrement' : intrinsic function, cannot be defined

ошибка в combase.h (заголовок из DirectShow) и код:

static inline LONG WINAPI InterlockedIncrement(volatile LONG * plong) { return InterlockedIncrement(const_cast<LONG*>(plong)); }

InterlockedIncrement определяется в winnt.h как:

#define InterlockedIncrement _InterlockedIncrement

вы знаете, любое решение этой ошибки делать?

+0

http://stackoverflow.com/a/18548135/17034 –

+0

@HansPassant У меня есть библиотеки DirectShow в папку '.. \ sdk \'. У меня есть еще один проект, который успешно скомпилирован с фактическими библиотеками, поэтому я думаю, что есть некоторые настройки проекта, которые я пропустил. Кроме того, я пробовал использовать «Enable Intrinsic Functions» (как «да», так и «нет»), и у меня все же есть те же ошибки. – Madalin

+0

Для GraphStudioNext у нас есть [базовые очки] (https://github.com/cplussharp/graph-studio-next/tree/master/baseclasses) как часть решения. Для него есть VS2013. – CPlusSharp

ответ

1

Ваш #define заменяет все вхождения InterlockedIncrement с _InterlockedIncrement, так static inline LONG WINAPI InterlockedIncrement(volatile LONG * plong) становится static inline LONG WINAPI _InterlockedIncrement(volatile LONG * plong).

Это значит, что вы пытаетесь определить функцию _InterlockedIncrement, что запрещено, так как оно является внутренним.

Я думаю, что вам нужно удалить

#define InterlockedIncrement _InterlockedIncrement

и сделать InterlockedIncrement вызов _InterlockedIncrement с соответствующим преобразованием аргумента, если это необходимо.

+0

'# define' это на самом деле в winnt.h, который является заголовком из Windows SDK, поэтому я не определил' InterlockedIncrement' – Madalin

+0

или первый '#undef InterlockedIncrement', а затем использовал' static inline LONG WINAPI InterlockedIncrement (volatile LONG * plong) {return _InterlockedIncrement (const_cast (plong)); } ' – wimh

 Смежные вопросы

  • Нет связанных вопросов^_^