gpt4 book ai didi

c++ - nsIURI 没有成员 'asciiSpec' 、 'asciiHost' 等错误

转载 作者:太空狗 更新时间:2023-10-29 21:27:55 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com