Visual C++中删除托管对象、包装库及其他
2008-11-12 19:26:24 来源:WEB开发网以下是引用片段:
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;
};
- ››删除Win8自带中文输入法方法
- ››Visual Basic 2008 数学函数
- ››Visual Studio2005中Smart Device的问题
- ››Visual Studio 中根据数据库字段动态生成控件
- ››Visual Studio 11全新黑色主题
- ››Visual Studio 2011 Beta新特性(一):安装VS201...
- ››删除TXT中内容重复的行只保留唯一值
- ››删除*.py文件中的注释
- ››删除Word2010文档最近的位置记录
- ››删除win7资源管理器碍眼图标小技巧
- ››删除vista系统NIFS分区文件的方法
- ››删除Linux后 找回Windows启动菜单
更多精彩
赞助商链接