我使用的是 VS2005,正在写一个标准库文件!
我设置编译器忽略所有默认库,然后自己写了一个 Memset、Memcpy 的函数来替换默认的函数(代码里也没有使用 new,而改用 GlobalAlloc 函数)!
但是当编译的时候,总是提示:
error LNK2001: 无法解析的外部符号 _memcpy
或者
error LNK2001: 无法解析的外部符号 _memset
但是我综观所有代码,都没有调用 memcpy 和 memset 函数啊!
下面是我自己写的 Memset 和 Memcpy 函数:
void * Memset(void *dst, int val, UINT count)
{
void *start = dst;
while (count--) {
*(char *)dst = (char)val;
dst = (char *)dst + 1;
}
return start;
}
void * Memcpy(void *lpDst, const void *lpSrc, UINT uSize)
{
void *lpRet = lpDst;
while (uSize--) {
*(char *)lpDst = *(char *)lpSrc;
lpDst = (char *)lpDst + 1;
lpSrc = (char *)lpSrc + 1;
}
return lpRet;
}
出错的地方(我都是把每个代码文件都注释一部分,然后看看有没有错误!如果有则表示出错的地方不在注释的部分;如果没有则表示出错的地方就是我注释掉的位置)总是出现在下面几个情况:
1、调用 Memcpy 或 Memset 时
我在包含这两个函数体实现代码的 cpp 文件中调用它们的时候没出错!但在其它的 cpp 文件中调用的话就会出错(我已经引用了头文件,或者使用 extern 来定义它们,但还是出现
error LNK2001: 无法解析的外部符号 _memxxx 这个错误
2、初始化结构变量的时候
例如:
NONCLIENTMETRICS ncm = {sizeof(NONCLIENTMETRICS)}; ← 这样会出错:
error LNK2001: 无法解析的外部符号 _memset
但是:
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
这样就没有错误!
连续搞了三天了,网上也没有发现我这情况,也不知道问题出在哪里!!!!!!
可能我表达的问题不够详细,有不明白的地方请举手!