- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 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 方法。接口(interface)定义文件(IDL 文件)使用 xpidl
工具编译成常规 C++ 头文件 - 因此您找到的文件是正确的,但它是自动生成的。你会得到这样的 asciiSpec
属性:
nsCString spec;
nsresult rv = mURI->GetAsciiSpec(spec);
if (NS_FAILED(rv))
... // handle error
else
... // do something with spec variable
没有 SetAsciiSpec
方法,因为这个属性是只读的。
关于c++ - nsIURI 没有成员 'asciiSpec' 、 'asciiHost' 等错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195623/
我对 Mozilla (6.0.2) 代码中的 nsMediaStream.h/cpp 进行了一些修改,其中一项要求我从 Mozilla 框架用于表示和解析 URI 的 nsIURI 类中获取 ASC
我是一名优秀的程序员,十分优秀!