Здравствуйте, Everon, Вы писали:
E>Мне только этот момент уловить бы. Как обрабатывать кнопки и что должно лежать в "locale" я знаю, со структурой *.rdf и *.dtd тоже знаком. Понять бы только как добраться из этого всего до родного WinAPI
Это делается так (на примере моего расширения):
1. Пишем интерфейс компонента (IMessageBoxer.idl).
#include "nsISupports.idl"
[scriptable, uuid(90758A97-A6F3-4ea4-8953-16BD2EE3A978)]
interface IMessageBoxer : nsISupports
{
void ShowMessage(in string);
};
2. Пишем реализацию (MessageBoxer.cpp):
#include "nsIGenericFactory.h"
#include "windows.h"
...
NS_GENERIC_FACTORY_CONSTRUCTOR(MessageBoxer)
NS_IMPL_ISUPPORTS1(MessageBoxer, IMessageBoxer)
MessageBoxer::MessageBoxer() {}
MessageBoxer::~MessageBoxer() {}
NS_IMETHODIMP MessageBoxer::MessageBox(string s)
{
::MessageBox(...);
return NS_S_OK;
}
static nsModuleComponentInfo components[] =
{
{
MESSAGEBOXER_CLASSNAME,
MESSAGEBOXER_CID,
MESSAGEBOXER_CONTRACTID,
MessageBoxerConstructor,
}
};
NS_IMPL_NSGETMODULE("MessageBoxerModule", components)
3. Компилим IMessageBoxer.idl + MessageBoxer.cpp => IMessageBoxer.xpt + MessageBoxer.dll
4. Регистрируем компонент во время инсталяции аддона. Точно не помню как, если надо — посмотрю.
5. Используем из JavaScript
var messageboxer_xpcom = Components.classes['@programmer.gmail.com/MessageBoxer;1'].
createInstance(Components.interfaces.IMessageBoxer);
try
{
messageboxer_xpcom.MessageBox("Bla bla bla");
}
catch(e)
{
}