关于数据结构的.net组件,征求意见!

xhcldatastruct 2006-08-09 12:18:54

我设计了一套关于数据结构的.net组件,侧重于与数据库的绑定,以及远程传输。详细说明,可见软件包中的 XHCLDataStruct.chm 。

下载地址 : http://download.enet.com.cn/html/030212006052206.html
...全文
306 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
javalin3012 2006-10-10
  • 打赏
  • 举报
回复
说的不错
顶一个
xingyaohua 2006-10-01
  • 打赏
  • 举报
回复
10.1也来顶
xhcldatastruct 2006-09-11
  • 打赏
  • 举报
回复
感谢 Mark2Win !

这是一个混合模式编程中,由于变量没有初始化,造成的偶发性错误。Debug 编译版没有发现出错;Release 编译版时不时报错。经分析,原因是变量没有初始化,其值不确定,导致程序流程不确定。

通常如果变量没有初始化, VS.NET 编译时会警告,并且对其初始化。但是可能有意外。

出错处:
IXHCLobjDoublyLinkedList* XHCLsrcDoublyLinkedList::GetDoublyLinkedList(......)
{
......
__int64 ptrException;
HRESULT hr = this->m_pIXHCLsrcDoublyLinkedListCom->XHCLsrcDoublyLinkedList_GetObjectWithId (
......
&ptrException);
if 0 != ptrException)
{
throw ......;
}
......
}

非托管函数 XHCLsrcDoublyLinkedList_GetObjectWithId 的托管定义:
HRESULT XHCLsrcDoublyLinkedList_GetObjectWithId(
......
[OutAttribute] __int64 __gc *pptrException
);

非托管函数 XHCLsrcDoublyLinkedList_GetObjectWithId 有关代码:
STDMETHODIMP CoXHCLsrcDoublyLinkedListCom::XHCLsrcDoublyLinkedList_GetObjectWithId(
......
__int64 *pptrException,
......)
{
......
if (......)
{
......
}
......
}

托管代码中变量 ptrException 初始化为 0 时,不在出错。按理,XHCLsrcDoublyLinkedList_GetObjectWithId 的托管定义相关参数的属性 OutAttribute,变量 ptrException值不传递给非托管程序,无法理解为何只须初始化变量 ptrException 就有效果。

非托管代码中,pptrException 指向的地址是由系统分配的,也没有初始化。只当程序执行进入 if 流程才会置值。碰巧出错时,没有进入 if 流程,直接将没有初始化的值返回了,并且 != 0 。只要加入代码 *pptrException = 0,不在出错。

在开发 XHCLDataStruct.NET 过程中,可以说一直在与各类偶发性错误斗争,以上只是一种。征求经验,特别是关于如何测试和纠错。
xhcldatastruct 2006-08-16
  • 打赏
  • 举报
回复
我在实践中对数据结构有一些自己的想法。

数据结构的应用十分灵活,但是再复杂的数据结构都可以用几种基本的数据结构组合而成。我一直在寻找反例,尚未发现。

我将数据结构的构成信息分成两类:结构信息,即数据元素集合相互之间的特定关系;数据信息,即数据元素。同类的基本数据结构的结构信息都是相同的,数据信息各异,这就使为之设计对应的类提供可能。组合成复杂数据结构,是通过在一个数据对象的数据信息中包含另一个数据对象实现的。

例如, VisualStudio 中的例子 Scribble :用一个线形表存储所有的笔画,每一个笔画的数据指向存储坐标点的线形表。我的软件包引用了这个例子,做相应修改,以便演示软件提供的对应类的调用。

特别指出我的 Scribble 例子,最终在窗口上的绘画保存到数据库,而非文件。执行存储着笔画线形表的类的 Update 函数,软件就会按预先的设置,将笔画线形表及其包含的坐标点线形表保存到数据库。反之,读取绘画时,软件按预先的设置从数据库读取数据,生成数据对象,用户最终得到的将是数据元素中包含着坐标点线形表的笔画线形表对象。这就是我所诉的数据库绑定。

另外软件提供的各类数据结构对象都可以 XML 编码,以及将 XML 反序列化成各类数据对象,以便实现远程传输。见软件包带的例子:一元多项式。

目前软件尚在开发中,希望大家下载,看看,帮我参谋参谋!

Mark2Win 2006-08-11
  • 打赏
  • 举报
回复
粗略看了下, 例子Scribble里, 打开既有图档1, 绘画后保存, 造成运算溢出

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧