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

本文介绍了nsIGenericFactory在C++XPCOM中的使用方法及其实现原理,并通过一个具体例子展示了如何利用nsIGenericFactory简化工厂对象的定义过程。同时,文章还探讨了在Visual C++ 6.0环境下使用nsIGenericFactory遇到的问题及可能的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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也许是当前唯一办法了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值