[新闻] dxpcom v0.1 发布
h_rain
2007-04-29
这两天就在查找简单点的嵌入Mozilla Browser的例子,没有太好的.
Mozilla自带的embedding\tests\winEmbed已经被废弃了,embedding\tests\mfcembed又太大了,并且这两个我用VC一直没有链接成功,编译没问题,真郁闷... 关注了一下XULRunner 1.9,说是在Q2季度发布,比较了一下,确实比1.8x要完善很多. 下面我就打算在XULRunner 1.9a5pre上弄一个最简单的Browser,然后再移植到dxpcom上,也算是一个测试dxpcom的东东吧. 资料太少,也不知道什么时候能完事,头痛... 还有,现在的XULRunner 1.9就打算是一个正式的产品了,对Mozilla的嵌入应用提供了完善的支持,但SDK中的IDL文件还是195个这么少,那前面找的1300多个的idl都是干什么的呀?在1.9中还会存在吗? |
|
qiezi
2007-04-29
我也不知道。195个idl里面连nsIDOMParser都没有,所以我才加了其它的进来。。
|
|
h_rain
2007-04-29
现在能得到的XULRunner1.9中,就是195个IDL,要是想得到其他的那些,是不是又要build最新的源码了,麻烦.
|
|
qiezi
2007-04-29
不用再build,把IDL拷过来就行了
|
|
h_rain
2007-04-30
关于COM对象的析构函数,既然COM对象在构造的时候是从非GC堆中分配的,那在Release中引用计数为0的时候,还是使用free释放掉自己不行吗?
|
|
qiezi
2007-04-30
std.c.windows.com.ComObject里面是这么写的:
ULONG Release() { LONG lRef = InterlockedDecrement(&count); if (lRef == 0) { // free object // If we delete this object, then the postinvariant called upon // return from Release() will fail. // Just let the GC reap it. //delete this; return 0; } return cast(ULONG)lRef; } 看样子后果是invariant不变式契约会有些问题,因为invariant会使用this,而这时this已经指向无效内存地址。如果不使用invariant当然没问题了,但我觉得还是不要让COM对象和其它对象有太大差异吧,用D写COM竟然不能享受到契约编程,有点不合理亚。 |
|
qiezi
2007-04-30
这个项目还没做完,不过已经学到了许多以前忽略的东西,最大的收获就在这里亚。。对D的许多细节也看得清楚些了。
|
|
h_rain
2007-04-30
呵呵,如果为了使用契约,当然就不能那么蛮干了:)
现在我也收获了许多以前被忽略的东西,同时也开始真的开始使用D了,这是我最大的收获吧。 |
|
oldrev
2007-05-01
invariant 设计的太简陋了,比如说一个文件流封装类 class File,它要持有一个操作系统的文件句柄,如果我们使用 invariant 来检测文件句柄是否有效的话就会与 closeFile() 方法冲突,因为 closeFile 执行完之后文件句柄就是无效的,这回引起 assert。
|
|
qiezi
2007-05-01
invariant检查的是不变量,比如你检查assert(closed && !handle || !closed && handle);,这是成立的,它对于对象来说任何时候都是合理的。close以后变量值会改变,本身就违背了不变量原则。
|