Microsoft может попытаться заставить вас использовать wsctok_s
вместо стандартного СООТВЕТСТВИЯ но неповторно wsctok
, особенно в коде драйвера устройства, связанную с ядром Windows.
Если отсутствует strtok_s
, это значит, что библиотека C для разработки ядра и драйверов является неполной. Вы находитесь в размещенной среде, части библиотеки Standard C могут отсутствовать.
Обратите внимание, что вы не используете старый прототип wcstok()
: Microsoft изменила прототип wcstok
в VisualStudio 2015, чтобы привести его в соответствие с C Стандарт:
wchar_t *wcstok(wchar_t *restrict ws1, const wchar_t *restrict ws2,
wchar_t **restrict ptr);
Было бы лучше, чтобы избежать использования эту функцию и изменить свой код, чтобы использовать wcschr()
напрямую.
Если wcschr
тоже отсутствует, используйте эту простую реализацию:
/* 7.29.4.5 Wide string search functions */
wchar_t *wcschr(const wchar_t *s, wchar_t c) {
for (;;) {
if (*s == c)
return (wchar_t *)s;
if (*s++ == L'\0')
return NULL;
}
}
Вот стандартная совместимую реализация wcstok()
:
wchar_t *wcstok(wchar_t *restrict s1, const wchar_t *restrict s2,
wchar_t **restrict ptr) {
wchar_t *p;
if (s1 == NULL)
s1 = *ptr;
while (*s1 && wcschr(s2, *s1))
s1++;
if (!*s1) {
*ptr = s1;
return NULL;
}
for (p = s1; *s1 && !wcschr(s2, *s1); s1++)
continue;
if (*s1)
*s1++ = L'\0';
*ptr = s1;
return p;
}
Какие версии компилятора/DDK/и т.д.? Посмотрите, может ли применяться [Breaking Changes in Visual C++ 2015] (https://msdn.microsoft.com/en-us/library/bb531344.aspx#BK_CRT) - найдите раздел 'wcstok'. – dxiv
Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) –
Библиотеки, доступные в ядре, не совпадают с usermode. wcstok может не быть tbere – mksteve