У nsIURI нет члена 'asciiSpec', 'asciiHost' и т. д. ошибка - PullRequest
3 голосов
/ 19 ноября 2011

Я сделал некоторые изменения в nsMediaStream.h / cpp в коде Mozilla (6.0.2), и для одного из них требуется, чтобы я получил строку ASCII из класса nsIURI, используемого платформой Mozilla для представления и анализа URI.Кажется, достаточно просто, можно подумать.Документация Mozilla (https://developer.mozilla.org/en/nsIURI) говорит мне, что я могу использовать атрибут asciiSpec для получения такой строки. Документация для nsACString ужасно сбивает с толку, но это другой вопрос.когда я пытаюсь использовать переменную nsIURI mURI для nsMediaStream, используя

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'

Когда я смотрю на указанный файл nsIURI.h, который генерируется из файла интерфейса IDL, я вижу следующее: http://google -web-toolkit.googlecode.com / svn / plugin-sdks / gecko-sdks / gecko-1.9.0 / include / nsIURI.h

Насколько я могу судить, указанный заголовочный файл не имеет никакого отношения к nsIURI, как это используется в коде Mozilla, и кажется скорее интерфейсом / прототипом, чем реальным классом. Ни один из атрибутов иметоды, перечисленные в документации, присутствуют. MSVC, похоже, согласен со мной в этом.После того, как я выжил в системе сборки, я не могу понять это, как и любой другой, кого я спрашивал до сих пор.Любые подсказки будут более чем оценены :)

1 Ответ

3 голосов
/ 20 ноября 2011

При использовании XPCOM из C ++ нет никаких свойств - все свойства интерфейса преобразуются в методы получения / установки. Файлы определения интерфейса (файлы IDL) компилируются в обычные заголовочные файлы C ++ с помощью инструмента xpidl - поэтому найденный файл является правильным, но он генерируется автоматически. Вы бы получили asciiSpec свойство как это:

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

Нет метода SetAsciiSpec, поскольку это свойство доступно только для чтения.

...