我对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
方法,因为这个属性是只读的