我已在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'

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

据我所知,头文件与Mozilla代码中使用的nsIURI完全无关,并且似乎比实际类更多的是接口(interface)/原型(prototype)。文档中列出的属性和方法均不存在。 MSVC似乎对此表示同意。

我感觉好像在这里错过了一些重要的事情,但是即使在Mozilla源码中花了几个月的时间并在构建系统中生存了下来,我似乎也无法弄清楚这一点,到目前为止,我也没有其他人问过。任何线索都将不胜感激:)

最佳答案

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

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

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

08-16 08:57