Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Вопросы по разработке.
DarkMaster
сообщение 27.5.2016, 13:29
Сообщение #1


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Cockney, ты использовал новый интерфейс плагинов с передачей результата по указателю? У меня пустоту возвращает хоть убей. Причем структуру создаю, все назначаю, старый вариант по всей цепочке указателей значение считывает нормально:
Код
     sprintf_s(ParamStruct->Result,
        "%u     " "%u     " "%s", &ResultStruct.RArray, ParamStruct->pResultStruct, ParamStruct->pResultStruct->RArray
        );

Но как только я ствалю:
Код
ResultStruct.used = true;

пустота приходит.

Сообщение отредактировал DarkMaster - 27.5.2016, 20:03


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 18:30
Сообщение #2


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Игрался. Было раз такое, но это я с адресами тупил. сяду за комп - напишу код.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 18:43
Сообщение #3


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



С адресами я тоже тупил. Точнее я думал структуру создаст пилот, а мне ее надо только принять, соответственно писал сначала в молоко и понять ничего не мог. Но сейчас вроде как все нормально сделано...
Код
include <stdexcept>

using namespace std;

struct tInitStruct
{
    long unsigned FunctionCount;
    const char** FunctionNames;
};


struct tResultStruct // Заполняется плагином. Память под строку выделяется и освобождается плагином.
{
    bool used;   // Используется ли эта структура при возврате значения. = false
    unsigned int RLength;  // Размер данных.
    char *RArray;     // Указатель на возвращаемую строку.
    unsigned int Reserved1;
    unsigned int Reserved2;
    unsigned __int64 Reserved3;
    unsigned __int64 Reserved4;
};
tResultStruct ResultStruct;



struct tParamStruct
{
    int unsigned* WindowHandle; // Handle of workWindow
    int unsigned* WindowPID; // pid of process of workWindow
    tResultStruct *pResultStruct;
    char* ParamString; // string of parameters with substituted variables
    char* ParamStringOrig; // original string of parameters
    char Result[32767]; // array for returned values
};


tParamStruct *ParamStruct;       // init by UOPilot
static tInitStruct InitStruct;   // init by plugin, free on unload


extern "C" __declspec(dllexport) unsigned long * __stdcall InitPlugin(int App, int Scr, double& Version)
{
    // Количество полезных экспортируемых функций для сообщения пилоту
    // в зависимости от версии протокола обмена между пилотом и плагином.
    // Это НЕ версия самого пилота, а версия протокола обмена между пилотом и длл.
    if (Version >= 2.18)
    {
        InitStruct.FunctionCount = 2;
        InitStruct.FunctionNames = new const char*[InitStruct.FunctionCount];
        InitStruct.FunctionNames[0] = "Function1";
        InitStruct.FunctionNames[1] = "Function2";
    }
    else
    {
        InitStruct.FunctionCount = 0; // Выгурзит длл, т.к. функций для экспорта нет.
    }
    return (&InitStruct.FunctionCount);
}


static char message[] = "123\0";
// Образец функции возвращающей строку.
extern "C" __declspec(dllexport) void __stdcall Function2(tParamStruct *ParamStruct)
{
        // Так работает по старой схеме:
    ResultStruct.RArray = message;
    ResultStruct.RLength = 4;
    ParamStruct->pResultStruct = &ResultStruct;
    sprintf_s(ParamStruct->Result,
             "%u     " "%u     " "%s", &ResultStruct.RArray, ParamStruct->pResultStruct, ParamStruct->pResultStruct->RArray
             );

        // Вот так пустоту возвращает:
    ResultStruct.used = true;
    ResultStruct.RArray = message;
    ResultStruct.RLength = 4;
    ParamStruct->pResultStruct = &ResultStruct;
}



Т.е. у тебя на практике реально новым методом данные возвращались?

Сообщение отредактировал DarkMaster - 27.5.2016, 23:26


Прикрепленные файлы
Прикрепленный файл  socket.7z ( 13,13 килобайт ) Кол-во скачиваний: 1529
Прикрепленный файл  msvcp120d.7z ( 150,41 килобайт ) Кол-во скачиваний: 1405
Прикрепленный файл  msvcr120d.7z ( 446,96 килобайт ) Кол-во скачиваний: 1416
Прикрепленный файл  socket2.7z ( 13,14 килобайт ) Кол-во скачиваний: 1433
Прикрепленный файл  socket3.7z ( 13,35 килобайт ) Кол-во скачиваний: 1410
Прикрепленный файл  socket4.7z ( 13,35 килобайт ) Кол-во скачиваний: 1504
Прикрепленный файл  socket5.7z ( 13,37 килобайт ) Кол-во скачиваний: 1512


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 18:51
Сообщение #4


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Да.

А если так ? я не знаю, есть ли разница, но....

ParamStruct->pResultStruct = int(&ResultStruct);

т.к. в ParamStruct адрес данных идет в reserved, который является cardinal(в сях наверно int, или аналог), а ты адрес суешь сразу.

Вроде по размеру как бы совпадает, но то адрес прямой, а то число, хотя хз как там в си.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 19:03
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



reserved был заменен на tResultStruct *pResultStruct;
Т.е. там натуральный указатель.
Цитата
ParamStruct->pResultStruct = int(&ResultStruct);

Фишка в том, что указатель там присвоен и он корректный, т.к.:
ParamStruct->pResultStruct->RArray
Содержит корректные данные...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 19:09
Сообщение #6


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Он корректный, да, ты же знаешь, что он там находится, и считываешь с него. А вот пилот, думаю, не знает, и пытается ЧИСЛО привести к АДРЕСУ. А выходит, что он непонятные данные приводит к чему-то. Ну имхо. Попробуй с исходным reserved. и приведи адрес к инту. не упрощай с лету все.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 19:19
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



дык адрес это и есть unsigned int. Он хранится как беззнаковое 4 байта, т.е. unsigned int. Запись указателя в инт на самом деле это не очень правильно. Т.е. компилятор скажет, что я не прав и нужно приведение, либо, как обычно и делается, сказать компилятору, что данные на самом деле нужного типа(int)pointer.
Кардинал это беззнаковый 4 байта?

Чет я в этой запаре уже пальцы заплетаются. Не крашит - пустоту возвращает.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 19:26
Сообщение #8


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Да.

Ты пробовал, как я писал?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 19:34
Сообщение #9


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Да, сейчас как раз сижу. Так же попробовал сделать ошибку записав адрес в знаковый инт - результат тот же.

Причем пустота возвращается какая-то странная. chrtohex пишет, что там вроде как пусто, но если сделать:
log $var
то в лог не будет выведена даже пустая строка.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 19:47
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Дай работающий пример. Чет у меня такое чувство, что там указатель как-то криво хранится...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 20:09
Сообщение #11


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



чуть позже будет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 20:36
Сообщение #12


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



кстати на:
ResultStruct.used = true;
реакция идет корректная, т.е. пилот получается все-таки видит структуру с результатом...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 20:56
Сообщение #13


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



а почему он должен ее не видеть?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.5.2016, 21:11
Сообщение #14


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Код
tResultStruct = packed record // Заполняется плагином. Память под строку выделяется и освобождается плагином.
    used          : boolean;   // Используется ли эта структура при возврате значения. = false
    RLength       : Cardinal;  // Размер данных. ТИП НЕ МЕНЯЮ                                       = 0
    RArray        : Pchar;     // Указатель на возвращаемую строку.                    = ''
    Reserved1     : Cardinal;
    Reserved2     : Cardinal;
    Reserved3     : Int64;
    Reserved4     : Int64;
  end;


Код
z : tResultStruct; //глобально


в инит плагине :
Код

//заполним данные
    z.RArray := 'f';
    z.RLength := Length(z.RArray);

вызов
Код
вызов


ParamStruct := AdressPS;
  //адрес структуры приведем к инт
  ParamStruct^.Reserved := Integer(@z);
  z.used := True;
  // return value not analized while, may be later
  Result := true;


Код
21:13:07 4 (autosaved_4.txt, 1): f
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.5.2016, 21:25
Сообщение #15


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Потому что не видит результат, как следствие у нас возникли вопросы видит ли он вообще структуру. Вопрос решен. Точнее причина найдена, решение ищу... Bool 4 байта... byte, char, char[1] тоже по 4 байта. Отсюда все и съезжает.

Решение(вроде только под MSVS):
Код
#pragma pack(push, 1)
struct tResultStruct // Заполняется плагином. Память под строку выделяется и освобождается плагином.
{
    bool used;   // Используется ли эта структура при возврате значения. = false
    unsigned int RLength;  // Размер данных.
    char *RArray;     // Указатель на возвращаемую строку.
    unsigned int Reserved1;
    unsigned int Reserved2;
    unsigned __int64 Reserved3;
    unsigned __int64 Reserved4;
};
#pragma pack(pop)

Так же есть ключ компилятора: /Zp.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TemTriss
сообщение 8.6.2016, 18:03
Сообщение #16


**

Neophyte
Сообщений: 13
Регистрация: 8.6.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.009
Возраст: 27



Доброго времени суток, а не кто случаем не сталкивался и нету ли готового решения плагина/дополнения, я хочу выложить свой скрипт, но не хочу что бы код его был открыт. Для этого нужен плагин для шифрования/дешифровки скрипта.


--------------------
Чай должен быть крепким как бункер, спрятался от всего, а утром очнулся в дурке!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.6.2016, 18:11
Сообщение #17


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Это не решается плагином.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TemTriss
сообщение 8.6.2016, 18:19
Сообщение #18


**

Neophyte
Сообщений: 13
Регистрация: 8.6.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.009
Возраст: 27



Цитата(DarkMaster @ 8.6.2016, 18:11) *

Это не решается плагином.

Может подскажите а есть ли другие варианты?
P.s. сори за офтоп.


--------------------
Чай должен быть крепким как бункер, спрятался от всего, а утром очнулся в дурке!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 8.6.2016, 18:25
Сообщение #19


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Нет. Нету.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 8.6.2016, 22:02
Сообщение #20


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8846
Пользователь №: 15.607



Цитата(TemTriss @ 8.6.2016, 17:03) *

Доброго времени суток, а не кто случаем не сталкивался и нету ли готового решения плагина/дополнения, я хочу выложить свой скрипт, но не хочу что бы код его был открыт. Для этого нужен плагин для шифрования/дешифровки скрипта.


http://www.cnet.com/how-to/how-to-encrypt-...s-with-notepad/
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V  1 2 3 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 1:38
Designed by Nickostyle