2016-01-18 2 views
0
#include <ntddk.h> 
#include <string.h> 

..... 

PWCHAR tmpBuf = NULL, pwBuf = NULL;; 

tmpBuf = ExallocatePoolWithTag(NonPagePool, (MAX_SIZE + 1) * sizeof(WCHAR), BUFFER_TAG); 
pwBuf = ExAllocatePoolWithTag(NonPagedPool, (MAX_SIZE + 1) * sizeof(WCHAR), BUFFER_TAG); 

RtlStringCchPrintfW(tmpBuf, MAX_SIZE + 1, L"ws", ProcName); 

pwBuf = wcstok(tmpBuf, L"\\"); 

... 

Сообщение об ошибке:неразрешенный внешний символ _wcstok ссылки в функции

ошибка LNK2019: неразрешенный внешний символ _wcstok ссылки в функции

Но. wcslen работа

+0

Какие версии компилятора/DDK/и т.д.? Посмотрите, может ли применяться [Breaking Changes in Visual C++ 2015] (https://msdn.microsoft.com/en-us/library/bb531344.aspx#BK_CRT) - найдите раздел 'wcstok'. – dxiv

+0

Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) –

+0

Библиотеки, доступные в ядре, не совпадают с usermode. wcstok может не быть tbere – mksteve

ответ

-1

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; 
} 
+0

же ошибка :( ошибка LNK2019: неразрешенный внешний символ _wcstok_s ссылки в функции – koala

+1

Почему downvote – chqrlie

+0

жаль я не знаю как я могу отменить downvote – koala

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

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