Полезная информация

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№125-02-2011 02:35:24

Bolopak
Участник
 
Группа: Members
Зарегистрирован: 25-02-2011
Сообщений: 2
UA: Firefox 3.6

XPCOM интерфейс типы данных

Есть такой обычный пример интерфейса

Выделить код

Код:

#include "nsISupports.idl"


[scriptable, uuid(911d170a-15dd-4e05-b1fa-da7a740b58fd)]
interface IMyComponent : nsISupports
{
  long Add(in long a, in long b);
};

и xpidl из Gecko SDK (1.9.2) без ошибок генерирует заголовочный файл.
xpidl -m header -I C:\Gecko_SDK\gecko_1.9.2\idl IMyComponent.idl 


А мне надо передать XPCOM компоненту строку.
В расширении для firefox (JavaScript) это var string='Какой-то текст из формы'
На C++ подошел бы тип char [4000]

В idl файле пишу так:
char * get_string (in char stri[4000]);
Т.е входной параметр некая строка, и возвращать эта функция будет тоже строку.

xpidl выдает еррор ** WARNING **: Parse of IMyComponent.idl failed
И никаких подробностей.

Подскажите, пожалуйста, какие типы можно использовать и где про это почитать!

Отсутствует

 

№225-02-2011 06:01:21

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 4.0

Re: XPCOM интерфейс типы данных

Bolopak
Использовать типы а-ля LPTSTR/LPCTSTR не пробовали? У вас же target platform - WINNTx86, насколько я понял? Поскольку вы собираетесь передавать "текст из формы", то он с большой вероятностью будет юникодным, и с типом char* вам понадобится куча дополнительных преобразований. Не знаю, как это выглядит в случае маршалинга XPCOM<->JS, но при маршалинге platform api<->JS через ctypes.jsm достаточно правильно указать типы параметров, а преобразования unicode/non-unicode делаются на лету.

Отредактировано hydrolizer (25-02-2011 06:12:14)

Отсутствует

 

№325-02-2011 10:43:22

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 11.0

Re: XPCOM интерфейс типы данных

Выделить код

Код:

AString get_string (in AString stri); => NS_IMETHOD get_string(const nsAString & stri, nsAString & _retval);

https://developer.mozilla.org/en/XPCOM_string_guide

Отсутствует

 

№425-02-2011 21:33:51

Bolopak
Участник
 
Группа: Members
Зарегистрирован: 25-02-2011
Сообщений: 2
UA: Firefox 3.6

Re: XPCOM интерфейс типы данных

hydrolizer пишет

Использовать типы а-ля LPTSTR/LPCTSTR не пробовали?

Та же ошибка странная возникает :/
.\IMyComponent.idl:7: `LPCTSTR' undeclared identifier
** WARNING **: Parse of IMyComponent.idl failed

Выделить код

Код:

#include "nsISupports.idl"

[scriptable, uuid(911d170a-15dd-4e05-b1fa-da7a740b58fd)]
interface IMyComponent : nsISupports
{
  //long Add(in long a, in long b);
    LPCTSTR Add (in LPCTSTR a);
};

Добавлено 25-02-2011 21:35:53

Elexander пишет

Код:AString get_string (in AString stri); => NS_IMETHOD get_string(const nsAString & stri, nsAString & _retval);https://developer.mozilla.org/en/XPCOM_string_guide

Спасибо большое!

Отредактировано Bolopak (25-02-2011 21:34:16)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]