Господа как вывести из функции тип char* - т.е. строку  ?
Функция декларирована так
     /* string GetData (); */
  NS_SCRIPTABLE NS_IMETHOD GetData(char **_retval) = 0;  - это в .h файле интерфейса
А вот так в .Idl файле
                 string GetData();     

Т.е. вродебы возвращать она должна строку но в реализации так не выходит
   получается только вернуть NS_OK .
В реализации этой функции я обращаюсь к глобальной переменной типа static char* variables    ;
                                                                          которую проверяю  и если все ОК то должен выдать на return .....
                                                                        но вот выдать на return не удается .
              Почему? непонятно .......

То, что в idl и в JavaScript возвращается как результат функции, в C++ возвращается через *_retval. Результатом функции в C++ является наличие/отсутствие ошибки (т.е. надо или нет выкидывать exception) - видимо, когда делали XPCOM, плюсовые компиляторы еще плохо поддерживали родные exception-ы.

Я так понял, что в return можно только макросы кидать типа NS_OK или error и.т.п.
  а настоящий return это   *_retval = char* например ?

По сути да.

Еще по поводу строк: http://www.mozilla.org/scriptable/faq.html#i9