Advertisement
Serginio

Untitled

Jul 16th, 2016
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.71 KB | None | 0 0
  1. // Определим сигнатуру метода
  2. typedef bool(*CallAsFunc) (void * , tVariant* , tVariant* , const long);
  3. //Создадим класс
  4.     class MethodInfo
  5.     {
  6.     public:
  7.         wstring MethodName;// Имя метода из 1С        
  8.        CallAsFunc  Method;// Ссылка на реальный метод        
  9.        long    ParamCount;// Количество параметров        
  10.        BOOL    HasRetValue// Это функция
  11.        // Метод инициализации полей
  12.        void Init(wstring MethodName, CallAsFunc  Method, long    ParamCount, BOOL    HasRetValue);    };
  13.  
  14. // Теперь мы можеи в базовом классе указать
  15.  
  16.     MethodInfo * pMethodsArray;// Ссылка на массив методов
  17.     int SizeArray// Размер массив
  18.  
  19.  
  20. // Затем в классе наследнике определить реальный массив
  21.  
  22. MethodInfo MethodsArray[2];
  23.  
  24. //А в конструкторе
  25. pMethodsArray = MethodsArray; // получаем ссылку на реальный массив
  26. SizeArray = 2;        // Инициализируем массив задавая ссылки на реальные методы      
  27.  pMethodsArray->Init(L"СоздатьОбертку", CreateDamain, 3, true);        
  28. MethodsArray[1].Init(L"ЗагрузитьDLL", LoadDLL, 1, true);
  29.  
  30.  
  31. // Теперь реализум основные методы ВК
  32.  
  33. //---------------------------------------------------------------------------//
  34.     long BaseNetObjectToNative::FindMethod(const WCHAR_T* wsMethodName)
  35.     {
  36.           long res= findMethod(MethodName);
  37.    
  38.     }
  39.     //---------------------------------------------------------------------------//
  40.  
  41.     const WCHAR_T* BaseNetObjectToNative::GetMethodName(const long lMethodNum,
  42.         const long lMethodAlias)
  43.     {
  44.         return 0//MethodName.c_str();
  45.  
  46.     }
  47.     //---------------------------------------------------------------------------//
  48.  
  49.     long BaseNetObjectToNative::GetNParams(const long lMethodNum)
  50.     {
  51.             return CurrentElem->ParamCount;
  52.      }
  53.  
  54.    
  55.     bool BaseNetObjectToNative::HasRetVal(const long lMethodNum)
  56.     {
  57.         return CurrentElem->HasRetValue;
  58.     }
  59.     //---------------------------------------------------------------------------//
  60.  
  61.     bool BaseNetObjectToNative::CallAsProc(const long lMethodNum,
  62.         tVariant* paParams, const long lSizeArray)
  63.     {            
  64.         return CurrentElem->Method(this, 0, paParams, lSizeArray);
  65.        
  66.     }
  67.     //---------------------------------------------------------------------------//
  68.  
  69.     bool BaseNetObjectToNative::CallAsFunc(const long lMethodNum,
  70.         tVariant* pvarRetValue, tVariant* paParams, const long lSizeArray)
  71.     {
  72.  
  73.         return CurrentElem->Method(this, pvarRetValue, paParams, lSizeArray);
  74.     }
  75.  
  76.  
  77. // В методе
  78.  
  79. long BaseNetObjectToNative::findMethod(wstring MethodName)
  80.     {
  81.         for(long i=0; i<SizeArray;i++)
  82.             if (pMethodsArray[i].MethodName == MethodName)
  83.             {
  84.                 CurrentElem = &pMethodsArray[i]; // Установим CurrentElem  на нужный элемент
  85.                 return i + 1;
  86.  
  87.          }
  88.         return 0;
  89.     }
  90.  
  91.  
  92. // Теперь нам нужно создать реальные методы
  93.  
  94. bool NetObjectToNative::SetNetObjectRef(void * Self, tVariant * pvarRetValue, tVariant * paParams, const long lSizeArray)
  95.     {
  96.  
  97.         tVariant * CurParam = paParams;
  98.         NetObjectToNative* self = (NetObjectToNative*)Self; // Получили ссылку на this объекта
  99.  
  100. //и не забывать прописывать данные о методах в конструкторе и классе.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement