Я делаю эксперимент с 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