Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ERROR : Cannot emit RTTI for parameter 'list' 
V
    Опции темы
Fyrklod
Дата 25.7.2011, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Доброе время суток ребята!
столкнулся с проблемой которую не могу решить, нужна ваша помощь.

Создаю SOAP Service в котром описываю функцию, которая принимает параметр типа TMyXMLNodeList* 

Код

class TMyXMLNode
{
     private:
    WideString FNodeName;
    WideString FNodeValue;
     public:
          __property WideString NodeName = {read=FNodeName, write=FNodeName};
          __property WideString NodeValue = {read=FNodeValue, write=FNodeValue};

          __fastcall TMyXMLNode(WideString FNodeName, WideString FNodeValue)
          {
            this->FNodeName = FNodeName;
            this->FNodeValue = FNodeValue;
          }
};

typedef DynamicArray<TMyXMLNode *> ArrayNode;

class TMyXMLNodeList
{
     private:
      ArrayNode FList;
      int FCount;

      int __fastcall FindNode (WideString NodeName);
     public:
          __property int Count = {read=FCount};

     __fastcall TMyXMLNodeList(void) { FCount=0 ;}

          TMyXMLNode* __fastcall GetNode (int Index);
          void __fastcall SetNode (WideString NodeName, WideString NodeValue);
          void __fastcall SetNode (TMyXMLNode * node);
          void __fastcall Clear (void);
          void __fastcall Delete (int Index);
};



в простом приложении этот тип принялся и все хорошо отработало,  вот сервис даже не захотел создаваться (ошибка в моменте компиляции), сообщение 
[BCC32 Error] MySOAP.cpp(74): E2513 Cannot emit RTTI for parameter 'list' in function 'IMySOAP::echoDouble(TMyXMLNodeList *)'


так понимаю код всего моего сервиса надо?
Код


MySOAP.h

#include <System.hpp>
#include <InvokeRegistry.hpp>
#include <XSBuiltIns.hpp>
#include <Types.hpp>
#include "MyNodeCollection.h"
__interface INTERFACE_UUID("{F505DD4C-AE74-4222-9769-C56A1B22D5B8}") IMySOAP : public IInvokable
{
public:
    virtual double  echoDouble(TMyXMLNodeList* list) = 0;
};
typedef DelphiInterface<IMySOAP> _di_IMySOAP;



MySOAP.cpp
Код


#include <stdio.h>
#include <vcl.h>

#pragma hdrstop
#include "MySOAP.h"

class TMySOAPImpl : public TInvokableClass, public IMySOAP
{
public:
  double         echoDouble(TMyXMLNodeList* Value);

  HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj)
                        { return GetInterface(IID, Obj) ? 0 : -1; }
  ULONG __stdcall AddRef() { return TInvokableClass::_AddRef();  }
  ULONG __stdcall Release() { return TInvokableClass::_Release();  }
};

double TMySOAPImpl::echoDouble(TMyXMLNodeList* dValue)
{
  return 5.1;   // Я СДЕЛАЛ ПРОСТО МЕТОД ЧТОБЫ ПОКАЗАТЬ
}


static void __fastcall MySOAPFactory(System::TObject* &obj)
{
  static _di_IMySOAP iInstance;
  static TMySOAPImpl *instance = 0;
  if (!instance)
  {
    instance = new TMySOAPImpl();
    instance->GetInterface(iInstance);
  }
  obj = instance;
}

static void RegTypes()
{
  InvRegistry()->RegisterInterface(__delphirtti(IMySOAP));
  InvRegistry()->RegisterInvokableClass(__classid(TMySOAPImpl), MySOAPFactory);
//  InvRegistry()->RegisterInvokableClass(__classid(TMyXMLNodeList), echoDouble);
}
#pragma startup RegTypes 32[/SRC]

--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
artsb
Дата 25.7.2011, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Приведённый код из MySOAP.cpp урезан и теперь не понятно на какой строке возникает ошибка.

Это сообщение отредактировал(а) artsb - 25.7.2011, 08:18


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fyrklod
Дата 25.7.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



в коде урезанны комментарии и несколько инклудов в остальном все на месте

ошибку кидает ниже 
Код

#pragma startup RegTypes 32


да и судя по ошибке, ему начинает не нравится уже сам интерфейс, но вот почему он тогда не на него показывает - ХЗ
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
artsb
Дата 25.7.2011, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Ясно. Вообще, list - это же STL'евский класс. Попробуйте переименовать свою переменную.
Цитата(Fyrklod @  25.7.2011,  09:59 Найти цитируемый пост)
но вот почему он тогда не на него показывает - ХЗ 

Для Билдера это нормально smile

Это сообщение отредактировал(а) artsb - 25.7.2011, 12:08


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fyrklod
Дата 25.7.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Цитата(artsb @  25.7.2011,  12:07 Найти цитируемый пост)
Ясно. Вообще, list - это же STL'евский класс. 


в данном случае LIST это параметр функции

Цитата(Fyrklod @  25.7.2011,  00:42 Найти цитируемый пост)
virtual double  echoDouble(TMyXMLNodeList* list) = 0;


Цитата(artsb @  25.7.2011,  12:07 Найти цитируемый пост)
Попробуйте переименовать свою переменную.

Да я уже и просто имя дела L
лажа та же 




--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
xvr
Дата 28.7.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Fyrklod @  25.7.2011,  00:42 Найти цитируемый пост)
//  InvRegistry()->RegisterInvokableClass(__classid(TMyXMLNodeList), echoDouble);

Он у вас ругается на это (я надеюсь, что в коде это раскоментированно). 
__classid можно применять только к Delphi классам - унаследуйте ваш TMyXMLNodeList от TObject


Поправка: И в закоментаренном виде тоже может ругаться - у вас требуется RTTI от IMySOAP, а у него в интерфейсе функция, которая потребляет TMyXMLNodeList  параметром. Так что он (TMyXMLNodeList) тоже должен быть Delphi классом


Это сообщение отредактировал(а) xvr - 28.7.2011, 10:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0947 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.