2013-04-07 4 views
0

Я пытаюсь создать расширение Firefox, использующее IDL. Тем не менее, сборка умирает с этой ошибкой:XPIDL (typelib.py) type not found error

[apply] Executing 'python' with arguments: 
[apply] 'C:\Users\Dad\Documents\Sage\xulrunner-sdk/sdk/bin/typelib.py' 
[apply] '-I' 
[apply] 'C:\Users\Dad\Documents\Sage\xulrunner-sdk/idl/' 
[apply] '-o' 
[apply] 'C:\Users\Dad\Documents\Sage\build\xpi\components\sageIFeedParserListener.xpt' 
[apply] 'C:\Users\Dad\Documents\Sage\src\components\sageIFeedParserListener.idl' 
[apply] 
[apply] Traceback (most recent call last): 
[...] 
[apply] File "C:\Users\Dad\Documents\Sage\xulrunner-sdk\sdk\bin\xpidl.py", line 959, in resolve 
[apply]  self.realtype = method.iface.idl.getName(self.type, self.location) 
[apply] File "C:\Users\Dad\Documents\Sage\xulrunner-sdk\sdk\bin\xpidl.py", line 271, in getName 
[apply]  raise IDLError("type '%s' not found" % id, location) 
[apply] xpidl.IDLError: error: type 'PRInt64' not found, sageIFeedItemEnclosure.idl line 44:32 
[apply] void init(in AString link, in PRInt64 length, in AString mimeType); 

Я использую последнюю версию выпуска XulRunner-SDK (20), который я установил, просто распаковка в папку; Я не верю, что мне нужно сделать что-нибудь еще, но, возможно, я ошибаюсь в этом? У меня Python 2.7.3. Пути в вызове typelib.py кажутся правильными. Сам файл IDL прост и выглядит следующим образом:

#include "nsISupports.idl" 

[scriptable, uuid(73C6ECE6-0D9F-474C-8959-3979D2D1CBDB)] 
interface sageIFeedItemEnclosure: nsISupports { 

    void init(in AString link, in PRInt64 length, in AString mimeType); 
} 

И я могу видеть, что PRInt64 определяется в nsISupportsPrimitives.idl. Тем не менее, я получаю ту же ошибку, даже если я конкретно включаю этот файл в файл IDL, который я пытаюсь скомпилировать, поэтому я подозреваю, что это еще одна проблема.

Любые идеи?

+0

Что произойдет, если вы измените 'PRInt64' на' int64_t'? – paa

+0

int64_t работает. Так что это говорит нам? –

+0

Смотрите мой ответ и принимайте его, если вы не возражаете :) – paa

ответ

0

64-разрядный целочисленный тип данных int64_t определен в nsrootidl.idl, который включен nsiSupports.idl и поэтому доступен везде.

Что вы видите в nsISupportsPrimitives.idl является декларацией интерфейса nsISupportsPRInt64.