我在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源码上花了几个月并且在构建系统中幸存下来之后,我似乎无法想象这一点,到目前为止我也没有其他人问过。任何线索都不仅仅是赞赏:)
答案 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
方法,因为此属性是只读的。