Доброе время суток ребята! столкнулся с проблемой которую не могу решить, нужна ваша помощь.
Создаю 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]
|
|