现在的位置: 首页 > 综合 > 正文

gecko-sdk的nsIGenericFactory和宏NS_IMPL_ISUPPORTS*在VC6下面会表现异常。

2013年11月27日 ⁄ 综合 ⁄ 共 871字 ⁄ 字号 评论关闭
nsIGenericFactory对于编写简单C++ XPCOM来说是个好东西,她可以把复杂的
Factory对象定义用简单几句话完成,nsIGenericFactory其实是基于表驱动来实
现的,一个简单的C++ XPCOM类厂如下:
(更新补充: 宏NS_IMPL_ISUPPORTS*和NS_GENERIC_FACTORY_CONSTRUCTOR交互的结果
显示,出错的是NS_IMPL_ISUPPORTS*
)
NS_IMPL_ISUPPORTS1(nsJrSample, nsIJrSample)

NS_GENERIC_FACTORY_CONSTRUCTOR(nsJrSample);
static const nsModuleComponentInfo components[] =
{
{ "Joyer Huang Sample",
NS_IJRSAMPLE_IID,
"@joyer.huang/jrsample;1",
nsJrSampleConstructor
}
};
NS_IMPL_NSGETMODULE(nsSampleModule, components)

在其中nsJrSample是XPIDL生成的实现类,NS_IJRSAMPLE_IID是接口ID的串值,
nsJrSampleConstructor就是NS_GENERIC_FACTORY_CONSTRUCTOR宏生成的类厂,
最后一句生成第个XPCOM dll都需要的extern "C" NSGetModule函数。

这一切太简单,应该工作得很好才对。。
可惜,在VC6下面编译的组件,需然XUL能注册并加载,但实例化接口时总是会返回
下面这个错误


经过在N多网站的搜索了解不到什么信息,只是得到一些修改编译参数的意见,
比如加入所有.lib到工程当中,工程中加入宏XP_WIN等等。但是这个错误依旧。

最后区区是用debug方法处理了,手工将这些utilities宏改写(才能调试~),结论是
在VC6下面(无论是原版还是sp6版),便利宏都行为异常。。手写factory也许是当前唯一办法了。

区区打算再查一会儿~~再把分析结果更新

抱歉!评论已关闭.