nsIURI没有成员'asciiSpec','asciiHost'等错误

时间:2011-11-19 16:54:02

标签: c++ interface mozilla xpcom

我在Mozilla(6.0.2)代码中对nsMediaStream.h / cpp进行了一些修改,其中一个要求我从Mozilla框架用于表示和解析URI的nsIURI类中获取ASCII字符串。人们可能会想,似乎很容易。 Mozilla文档(https://developer.mozilla.org/en/nsIURI)告诉我,我可以使用属性asciiSpec来获取这样的字符串。 nsACString的文档令人非常困惑,但这是另一回事。

当我尝试使用nsMediaStream的nsIURI变量mURI时

mURI->asciiSpec

我从MSVC编译器收到以下错误:

[..]/content/media/nsMediaStream.cpp(146) :
 error C2039: 'asciiSpec' : is not a member of 'nsIURI'
        [..]\obj-i686-pc-mingw32\dist\include\nsIURI.h(83) : see declaration of 'nsIURI'

当我查看从接口IDL文件生成的引用的nsIURI.h文件时,我看到以下内容:http://google-web-toolkit.googlecode.com/svn/plugin-sdks/gecko-sdks/gecko-1.9.0/include/nsIURI.h

据我所知,头文件与Mozilla代码中使用的nsIURI完全无关,而且看起来更像是一个接口/原型而不是实际的类。没有文档中列出的属性和方法。 MSVC似乎同意我的看法。

我觉得我在这里缺少一些大的东西,但即使在Mozilla源码上花了几个月并且在构建系统中幸存下来之后,我似乎无法想象这一点,到目前为止我也没有其他人问过。任何线索都不仅仅是赞赏:)

1 个答案:

答案 0 :(得分:3)

从C ++使用XPCOM时没有属性 - 所有接口属性都转换为getter / setter方法。使用xpidl工具将接口定义文件(IDL文件)编译为常规C ++头文件 - 因此您找到的文件是正确的,但它是自动生成的。你会得到asciiSpec这样的财产:

nsCString spec;
nsresult rv = mURI->GetAsciiSpec(spec);
if (NS_FAILED(rv))
  ...  // handle error
else
  ...  // do something with spec variable

没有SetAsciiSpec方法,因为此属性是只读的。