WEB开发网
开发学院软件开发VC Visual C++中删除托管对象、包装库及其他 阅读

Visual C++中删除托管对象、包装库及其他

 2008-11-12 19:26:24 来源:WEB开发网   
核心提示: 以下是引用片段:struct blah {int a, b;char *a, *b;struct blah *next;};struct blah *getmystruct();因为 getmystruct() 分配了内存,所以当我使用完这个函数后,Visual C++中删除托管对象、包装

以下是引用片段:
  struct blah {
  int a, b;
  char *a, *b;
  struct blah *next;
  };
  struct blah *getmystruct();

因为 getmystruct() 分配了内存,所以当我使用完这个函数后,我需要调用 freemystruct(struct blah *b)。我试图生成一个包装,将它转换成托管类型的集合,但我不知道当这些指针需要释放时如何处理它们。您能指点我一下吗?

Cory Nelson

答:哦,当然可以。您不能通过简单的 dllimport 语句将本机列表转换成托管类型的集合。interop 服务不错,但不是非常 好!您需要编写一个包装,它将您的列表显式转换成托管集合(例如 ArrayLis)。我编写了一个具有三个模块的程序 (ListWrap) 来说明如何实现。第一个模块是 ListLib.cpp,它实现了一个具有两个函数(AllocateList 和 FreeList)的本机 C++ 库 (DLL),它们的作用是分配和释放本机 C++ 结构的链接列表。这两个函数模拟应用程序中的 getmystruct 和 freemystruct 函数。第二个模块是一个托管 C++ 文件 — ListWrap.cpp,它实现了一个包装本机 C++ 实现的托管类 ManagedNode(请参见图 3)。第三个模块是一个 C# 测试程序,它调用包装来显示如何工作。您可以从 MSDN Magazine Web 站点下载 ListLib.cpp 和 C# 测试程序的完整源代码。

ListLib.cpp 实现了两个本机函数 — AllocateList 和 FreeList,它们用于分配和释放 NativeNode 结构的列表:

以下是引用片段:
  // from ListLib.h
  struct NativeNode {
  int a, b;
  TCHAR *str;
  struct NativeNode *next;
  };

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Visual 删除 托管

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接