2010-11-02 2 views
1

Я делаю эксперимент с wxWebConnect тестовым приложением, включающим в XPCOM учебник по «http://nerdlife.net/building-ac-xpcom-component-in-windows/»Как зарегистрировать компонентный интерфейс в wxwebconnect?

я адаптируюсь по мере необходимости класса MyComponent собрать вместе с testapp.exe (не в качестве отдельной DLL), а на MyApp :: OnInit у меня есть следующие строки:

ns_smartptr<nsIComponentRegistrar> comp_reg; 
res = NS_GetComponentRegistrar(&comp_reg.p); 
if (NS_FAILED(res)) 
    return false; 

ns_smartptr<nsIFactory> prompt_factory; 
CreateMyComponentFactory(&prompt_factory.p); 

nsCID prompt_cid = MYCOMPONENT_CID; 
res = comp_reg->RegisterFactory(prompt_cid, 
           "MyComponent", 
           "@mozilla.org/mycomp;1", 
           prompt_factory); 

Эти строки были скопированы из GeckoEngine :: Init(), используя тот же самый механизм для register PromptService и т. д. Код хорошо компилируется, и testapp.exe работает как ожидалось.

Я ставлю тест яваскрипта, как показано ниже:

try { 
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
    const cid = "@mozilla.org/mycomp;1"; 
    obj = Components.classes[cid].createInstance(); 
    alert(typeof obj); 
    // bind the instance we just created to our interface 
    alert(Components.interfaces.nsIMyComponent); 
    obj = obj.QueryInterface(Components.interfaces.nsIMyComponent); 
} catch (err) { 
    alert(err); 
    return; 
} 

и получить следующее исключение: Не удалось преобразовать JavaScript аргумент ARG 0 [nsISupport.QueryInterface]

Первое предупреждение говорит "объект", так линия

Components.classes[cid].createInstance() 

возвращает созданный экземпляр.

Второе предупреждение говорит «undefined», поэтому интерфейс nsIMyComponent не распознается XULRunner. Как динамически регистрировать интерфейс nsIMyComponent в среде wxWebConnect?

Thx

ответ

1

Я не уверен, что здесь происходит. Первое, что я хотел бы проверить, это то, что ваш компонент является скриптовым (я предполагаю, что это так, поскольку демоверсия, которую вы копируете, есть). Следующее, что я хотел бы проверить, заключается в том, можете ли вы создать другие стандартные компоненты XULRunner и получить их интерфейс (попробуйте что-то вроде «alert (« Components.interfaces.nsIFile »)» - по крайней мере, в моей версии wxWebConnect показано окно предупреждения . шпагат «nsIFile»

Кроме того, я думаю, что это будет стоят проверить консоль ошибок, чтобы убедиться, что нет никаких ошибок или предупреждений сообщенных Магической строки, чтобы сделать это (в JavaScript) является:.

window.open('chrome://global/content/console.xul', '', 'chrome,dialog=no,toolbar,resizable'); 
Смежные вопросы