跟进以下问题:
What lib in the gecko 1.9.3 SDK do I link against to use moz_xmalloc()?
nsIGenericFactory.h is missing in the above version of xulrunner-2.0.en-US.win32.sdk
我能够成功地使用 XULRunner 1.9.2 构建 XPCOM。
当我尝试迁移到 XULRunner 的下一个版本(> 1.9)时,我遇到了很多困难。我收到如下链接错误
xpcomglue_s.lib(GenericFactory.obj) : error LNK2001: unresolved external symbol __imp__moz_xmalloc
xpcomglue_s.lib(nsCRTGlue.obj) : error LNK2001: unresolved external symbol __imp__moz_xmalloc
xpcomglue_s.lib(nsTArray.obj) : error LNK2001: unresolved external symbol __imp__moz_xmalloc
xpcomglue_s.lib(nsComponentManagerUtils.obj) : error LNK2001: unresolved external symbol __imp__moz_xmalloc
xpcomglue_s.lib(GenericModule.obj) : error LNK2001: unresolved external symbol __imp__moz_xmalloc
xpcomglue_s.lib(nsISupportsImpl.obj) : error LNK2001: unresolved external symbol __imp__moz_xmalloc
我没有得到明确的迁移步骤以支持当前的 FireFox。
我尝试了链接中提到的建议。我无法解决它。请帮我解决这个问题
最佳答案
我希望有人能提供一份完整的 list ,说明应该更改哪些内容以使其在以后的壁虎上工作,但由于没有人这样做,我将尝试自己使用我刚刚找到的 this 示例来做。
程序
我不知道这是否已经改变,所以这可能没有必要。 Gecko 11 中没有 xpidl.exe。 的解决方案 Philip Chee
Gecko 7.0 可以从 ftp HERE 下载。它确实有 xpidl.exe。用法同example
组件模块实现
这个好像变了很多。 Reference in MDN 和 another reference(回到顶部提供的示例,但解释了一些内容)。
在示例项目中还添加了 #include "nsIClassInfoImpl.h"
。
现在最大的一步是更改 NS_IMPL_NSGETMODULE
(也被删除),以及 components
的声明,它被用于在 sample module 中找到的一大堆东西。你可以使用 components
的声明作为引用,我这样做了,有点帮助。
该示例中唯一不需要的是 kSampleCategories
的声明和使用。只需将其替换为 NULL
即可。至少这就是 Benjamin Smedberg said 。
常量 kNS_SAMPLE_CID
应替换为 kYOUR_CID_CONSTANT
。只需在您的 CID 常量名称前加上 k。
最后一行:
NS_IMPL_MOZILLA192_NSGETMODULE(&kSampleModule)
仅需要与 Gecko 1.9 兼容。由于 Firefox 3.5 使用它,我想我会离开它。
组件实现(CompImpl.cpp)
来自 sample 的引用。
NS_IMPL_CLASSINFO...
行(在示例中为第 80 行) NS_IMPL_ISUPPORTS1
替换为 NS_IMPL_ISUPPORTS1_CI
在这个示例中,有很多关于如何使用输入/输出值的好例子。如果你想使用 char* 你还需要使用 nsMemory。我认为对于 nsStrings 这不是必需的。
XPCOM Glue without mozalloc
我们又来了,一堆链接错误到
__imp__moz_xmalloc
。这篇很难找到的小文章帮助摆脱了它们:最后,没有错误
关于c++ - 构建 XPCOM XULRunner 2.0 或更新版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8724997/