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



我对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-mingw32distincludensIURI.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源代码中花了几个月的时间,并且在构建系统中幸存下来,我似乎也不能弄清楚这个问题,到目前为止我问过的任何人都不能。如有任何线索,将不胜感激:)

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

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

没有SetAsciiSpec方法,因为这个属性是只读的

最新更新