添加了一段第三方代码,结果总是提示下面错误:
这种问题最容易想到vs安装不正确,丢失了这个DLL。尝试google下载了一个,丢到System32下,结果无济于事。错误更离谱:
于是决定差个究竟,步骤,逐段注释代码然后运行试错,最终问题定位在strdup函数的调用上。右键调至它定义的地方:
#if !__STDC__ #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma push_macro("strdup") #undef strdup #endif _Check_return_ _CRT_NONSTDC_DEPRECATE(_strdup) _CRTIMP char * __cdecl strdup(_In_opt_z_ const char * _Src); #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma pop_macro("strdup") #endif #endif /* !__STDC__ */注意 __STDC__宏,说明这个函数不是标准C函数。
这里列出了C标准库string.h中定义的内容:
<cstring> (string.h) C Strings This header file defines several functions to manipulate C strings and arrays. Functions Copying: memcpy Copy block of memory (function ) memmove Move block of memory (function ) strcpy Copy string (function ) strncpy Copy characters from string (function ) Concatenation: strcat Concatenate strings (function ) strncat Append characters from string (function ) Comparison: memcmp Compare two blocks of memory (function ) strncmp Compare two strings (function ) strcoll Compare two strings using locale (function ) strncmp Compare characters of two strings (function ) strxfrm Transform string using locale (function ) Searching: memchr Locate character in block of memory (function ) strchr Locate first occurrence of character in string (function ) strcspn Get span until character in string (function ) strpbrk Locate characters in string (function ) strrchr Locate last occurrence of character in string (function ) strspn Get span of character set in string (function ) strstr Locate substring (function ) strtok Split string into tokens (function ) Other: memset Fill block of memory (function ) strerror Get pointer to error message string (function ) strlen Get string length (function ) Macros NULL Null pointer (macro ) Types size_t Unsigned integral type (type )ref:http://www.cplusplus.com/reference/cstring/
解决方法:自己实现这个函数!
char* x_strndup( const char *s1, size_t n) { char *copy= (char*)malloc( n+1 ); memcpy( copy, s1, n ); copy[n] = 0; return copy; }; char* x_strdup( const char* s1 ) { char* copy = (char*)malloc(strlen(s1) + 1); strcpy(copy, s1); return copy; }
计算机丢失MSVCR90.dll问题,布布扣,bubuko.com
原文地址:http://blog.csdn.net/ryfdizuo/article/details/30229325