jjccx

jjccx's blog
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.问题描述:
在VS2003中,新建一个类库(.NET)项目,系统自动生成一个类:
namespace Test
{
 public __gc class Class1
 {
  // TODO: 在此添加此类的方法。
 };
}
当我们在类中添加如下一个函数后:
void f()
{
 char* s = new char[90];
 delete[] s;
}
点击生成,编译通过,但链接却无法通过,出现如下两个链接错误:
error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned int)"
error LNK2001: 无法解析的外部符号 "void __cdecl operator delete(void *)"
2.解决方案:
在网上搜索了一天半,终于解决,在项目属性里添加一个附加依赖项:msvcrt.lib。这样再生成项目就不会出现上面的错误了。
3.遗留问题:
虽然项目是生成了,但是在MSDN里面有一个例程:“MCppWrapper 示例:说明如何用托管扩展包装 C++ DLL”(Internet Url:MCppWrapper 示例:说明如何用托管扩展包装 C++ DLL),它里面有一个工程MCppSuffix,在文件suffix.cpp中,有如下一个类:
public __gc class substring_w
{
public:
 String * find_suffix(String * s, int pos)
 {
  int length = s->Length;
  char * in_string = new char[length+1];//notice the new operator in this line
  for(unsigned short i = 0; i<length; i++)
  {
   in_string[i] = (char)s->Chars[i];
  }
  in_string[length] = '\0';
  substring s0 = substring(in_string);
  delete [] in_string;//notice the delete operator in this line
  return s0.suffix(pos);
 }
};

当我们生成此项目时,却没有出现上面所述的问题,并却本工程也没有附加msvcrt.lib,不知这个问题的本质是怎样的。