Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Определим сигнатуру метода
- typedef bool(*CallAsFunc) (void * , tVariant* , tVariant* , const long);
- //Создадим класс
- class MethodInfo
- {
- public:
- wstring MethodName;// Имя метода из 1С
- CallAsFunc Method;// Ссылка на реальный метод
- long ParamCount;// Количество параметров
- BOOL HasRetValue// Это функция
- // Метод инициализации полей
- void Init(wstring MethodName, CallAsFunc Method, long ParamCount, BOOL HasRetValue); };
- // Теперь мы можеи в базовом классе указать
- MethodInfo * pMethodsArray;// Ссылка на массив методов
- int SizeArray// Размер массив
- // Затем в классе наследнике определить реальный массив
- MethodInfo MethodsArray[2];
- //А в конструкторе
- pMethodsArray = MethodsArray; // получаем ссылку на реальный массив
- SizeArray = 2; // Инициализируем массив задавая ссылки на реальные методы
- pMethodsArray->Init(L"СоздатьОбертку", CreateDamain, 3, true);
- MethodsArray[1].Init(L"ЗагрузитьDLL", LoadDLL, 1, true);
- // Теперь реализум основные методы ВК
- //---------------------------------------------------------------------------//
- long BaseNetObjectToNative::FindMethod(const WCHAR_T* wsMethodName)
- {
- long res= findMethod(MethodName);
- }
- //---------------------------------------------------------------------------//
- const WCHAR_T* BaseNetObjectToNative::GetMethodName(const long lMethodNum,
- const long lMethodAlias)
- {
- return 0//MethodName.c_str();
- }
- //---------------------------------------------------------------------------//
- long BaseNetObjectToNative::GetNParams(const long lMethodNum)
- {
- return CurrentElem->ParamCount;
- }
- bool BaseNetObjectToNative::HasRetVal(const long lMethodNum)
- {
- return CurrentElem->HasRetValue;
- }
- //---------------------------------------------------------------------------//
- bool BaseNetObjectToNative::CallAsProc(const long lMethodNum,
- tVariant* paParams, const long lSizeArray)
- {
- return CurrentElem->Method(this, 0, paParams, lSizeArray);
- }
- //---------------------------------------------------------------------------//
- bool BaseNetObjectToNative::CallAsFunc(const long lMethodNum,
- tVariant* pvarRetValue, tVariant* paParams, const long lSizeArray)
- {
- return CurrentElem->Method(this, pvarRetValue, paParams, lSizeArray);
- }
- // В методе
- long BaseNetObjectToNative::findMethod(wstring MethodName)
- {
- for(long i=0; i<SizeArray;i++)
- if (pMethodsArray[i].MethodName == MethodName)
- {
- CurrentElem = &pMethodsArray[i]; // Установим CurrentElem на нужный элемент
- return i + 1;
- }
- return 0;
- }
- // Теперь нам нужно создать реальные методы
- bool NetObjectToNative::SetNetObjectRef(void * Self, tVariant * pvarRetValue, tVariant * paParams, const long lSizeArray)
- {
- tVariant * CurParam = paParams;
- NetObjectToNative* self = (NetObjectToNative*)Self; // Получили ссылку на this объекта
- //и не забывать прописывать данные о методах в конструкторе и классе.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement