purebasic.info

PureBasic forum
Текущее время: Чт июн 04, 2020 6:00 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 9:16 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO писал(а):
Надо эту функцию переделать в PureBasic, я неправильно переделал.
Код:
1
2
3
4
5
6
7
8
9
10
11
static BOOL isHighlightMainActive(void)
{
    PLUGINFUNCTION *pfW = (PLUGINFUNCTION *) SendMessageW( g_Plugin.hMainWnd,  AKD_DLLFINDW, (WPARAM) cszHighlightMainW, 0 );
 
    if ( pfW && pfW->bRunning )
    {
        return TRUE;
    }
 
    return FALSE;
}



Вот это вроде выдало nFunctionLen = 16 это сходится, значит правильное направление.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ProcedureCDLL isHighlightMainActive(*g_Plugin.PLUGINDATA)
        Protected *pf.PLUGINFUNCTION
        ; *pf = *g_Plugin\lpPluginFunction
        *pf = SendMessage_(*g_Plugin\hMainWnd, #AKD_DLLFINDW, @"Coder::HighLight", 0)
        If *pf & *pf\bRunning ; если флаг запуска True, то
                MessageRequester("Coder::HighLight", "запущен")
        EndIf
        Protected res.s = ""
        res + "SizeOf = " + Str(SizeOf(*pf\next)) + ", *next = " + Str(*pf\next) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\prev)) + ", *prev = " + Str(*pf\prev) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\pFunction)) + ", *pFunction = " + Str(*pf\pFunction) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\szFunction)) + ", *szFunction = " + Str(*pf\szFunction) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\wszFunction)) + ", *wszFunction = " + Str(*pf\wszFunction) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\nFunctionLen)) + ", nFunctionLen = " + Str(*pf\nFunctionLen) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\wHotkey)) + ", wHotkey = " + Str(*pf\wHotkey) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\bAutoLoad)) + ", bAutoLoad = " + Str(*pf\bAutoLoad) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\bRunning)) + ", bRunning = " + Str(*pf\bRunning) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\PluginProc)) + ", *PluginProc = " + Str(*pf\PluginProc) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\lpParameter)) + ", *lpParameter = " + Str(*pf\lpParameter) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pf\nRefCount)) + ", nRefCount = " + Str(*pf\nRefCount) + #CRLF$
       
        MessageRequester("Структура PLUGINFUNCTION", res)
        MessageRequester("Coder::HighLight", "нет")
EndProcedure



Сергейчик
Зачем весь мой пост копировать, можешь просто скопировать ник, выделить двойным кликом, нажать Bold и под ником ответить, нажавть кнопку "Ответить".

Попробуй так,ну и посмотри *g_Plugin.hMainWnd на вход мессаги правильный или нет. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
 
Procedure.i isHighlightMainActive(*g_Plugin.PLUGINDATA)
   Protected *pfW .PLUGINFUNCTION =  SendMessage_( *g_Plugin.hMainWnd,  #AKD_DLLFINDW, @"Coder::HighLight", 0 );
 
    If  *pfW>0 And *pfW\bRunning>0;есле адрес на структуру получен и bRunning #true то всё ок!
   
       ProcedureReturn #True;
    EndIf
    ProcedureReturn #FALSE;
EndProcedure
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 9:25 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Да, я уже исправил в предыдущем посте на "And", потому что при неправильном имени падал AkelPad. Изначально подумал что он в структуре проверяет наличие флага, а потом понял, что он просто проверяет возврат структуры (не 0) и флаг запущенности в True

И обновил плаг Highlight, добавив проверку наличия "Coder::HighLight" перед выполнением.

Сергейчик
За FRAMEDATA я тебе лайк добавил, конечно я запустил пример и посмотрел, что ты вывел даже путь к текущей вкладке, этой структурой думаю позже воспользуюсь.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 10:36 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO писал(а):
Да, я уже исправил в предыдущем посте на "And", потому что при неправильном имени падал AkelPad. Изначально подумал что он в структуре проверяет наличие флага, а потом понял, что он просто проверяет возврат структуры (не 0) и флаг запущенности в True

И обновил плаг Highlight, добавив проверку наличия "Coder::HighLight" перед выполнением.

Сергейчик
За FRAMEDATA я тебе лайк добавил, конечно я запустил пример и посмотрел, что ты вывел даже путь к текущей вкладке, этой структурой думаю позже воспользуюсь.

В кодоре на пурик сделай обязательно кроме запуска ещё компилить в листинг фасма и в длл. :roll:
Ps:Ну и может выложишь его плагин в исходнике.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 10:57 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Сергейчик
Цитата:
компилить в листинг фасма
ком строка какая? Это?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Пн май 18, 2020 12:15 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO писал(а):
Сергейчик
Цитата:
компилить в листинг фасма
ком строка какая? Это?

В смысле добавь в акелу моё пуребасик компилить в фасм как бы вариант в листинг в ту директорию где исходник и вариант в новое окно акеллы(можно типа и листинг оставить читая в акелле или вобще его уничтожить при закрытии окна?). :roll:
Ps:Вот примерно код но нужно также добавить настройку в акеле пути к компилятору есле нет. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
 
     #MV_CreateDll = " /DLL"
     #MV_createAsm = " /COMMENTED"
 
     
Procedure.i Compiler(CompilFlag.s)
     Protected.s SourceFileName, DestFileName, CompilerPath, Compiler, Parameter
     ;Protected.l RunOption
 
     ;Check Program Parameter the Source File
     SourceFileName = ProgramParameter()
     If SourceFileName = "";If not running as PB Tool request Pb File
         SourceFileName = OpenFileRequester("PBasic исходный файл", "", "PBasic file |*.pb", 0 )
         If SourceFileName = ""
             MessageRequester("Compile TO ...", "Исходный файл не выбран", #PB_MessageRequester_Ok | #MB_ICONINFORMATION)
             ProcedureReturn 0
         EndIf
     EndIf
 
 
         
       
                          If CompilFlag <> ""
                           
                                 CompilerPath = "C:\Program Files\PureBasic\Compilers"; + "\PbCompiler.exe"   ; Не забудте поменять на ваш путь к компилятору
                                 Compiler = CompilerPath + "\PbCompiler.exe"                     ; The PB Compiler !!
 
                                Select CompilFlag
                                   Case #MV_CreateDll
                                     DestFileName = Left(SourceFileName,Len(SourceFileName) - 3) + ".dll"
                                         Parameter = Chr(34) + SourceFileName + Chr(34) + CompilFlag
                                         RunProgram(Compiler , Parameter, CompilerPath, 2|1)
                                         CopyFile(CompilerPath + "\purebasic.dll", DestFileName)
                                    Case #MV_createAsm
                                         DestFileName = Left(SourceFileName,Len(SourceFileName) - 3) + ".asm"
                                         Parameter = Chr(34) + SourceFileName + Chr(34) + CompilFlag
                                         RunProgram(Compiler , Parameter, CompilerPath, 2|1)
                                         CopyFile(CompilerPath + "\purebasic.asm", DestFileName)
                                 EndSelect
                             
                                 If ExamineDirectory(0,GetPathPart(DestFileName),GetFilePart(DestFileName))
                                     If NextDirectoryEntry(0) = 1
                                         MessageRequester("Compile TO ...", DestFileName + " файл создан!", #PB_MessageRequester_Ok | #MB_ICONINFORMATION)
                                     Else
                                         MessageRequester("Compile TO ...", "Создание файла потерпело " + DestFileName + " неудачу!", #PB_MessageRequester_Ok | #MB_ICONINFORMATION)
                                     EndIf
                                 EndIf
                             
                             Else
                                 MessageRequester("Compile TO ...", "Пожалуйста выберите что скомпилировать", #PB_MessageRequester_Ok | #MB_ICONINFORMATION)    
                             EndIf
 ProcedureReturn 1
EndProcedure
Compiler(#MV_createAsm)
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вт май 19, 2020 6:22 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO
Что нового с плагином,удалось сделать автозагрузку?
Спросить хочу как сделать своё меню(подобиё твоего\моё) :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вт май 19, 2020 8:44 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Сергейчик писал(а):
Что нового с плагином,удалось сделать автозагрузку?
Для моего плага автозагрузка не нужна. Я делал проверку выполнения плага или наличия плага, это да, решилось и я обновил, о чём написал выше.

На счёт компилирования DLL я и сам хотел добавить, там просто флаг /DLL вместо /EXE, а то я тоже хотел скомпилировать в DLL, а он мне выдал EXE, то есть настройки в конце понимает IDE, но не компилятор, в итоге я подумал может сделать окно настроек как в IDE PureBasic, чтобы сохранил в ini, а пункт "Компилировать" работал читая ini или даже можно с исходника взять. Хотя этот пункт я бы сделал как не основной, чисто подправил что-то и скомпилировал, потому что заменить отладчик это пока не работает. Но редактировать мне удобней в AkelPad.

Сергейчик писал(а):
Спросить хочу как сделать своё меню(подобиё твоего\моё) :roll:
Там же в "Моё" смотри пункт "Изменить меню", откроется окно, в раскрывающемся списке выбери "главное меню" (можно и другие меню изменить - констекстное, вкладки). Чтобы удобней редактировать меню скопируй в окне всё и вставь в новый документ, при этом включится подсветка кода, отредактируешь и вставишь целиком обратно.
Чтобы тестить плаг проще создать кнопку на панели инструментов, для этого кликни на любой кнопке правой кнопкой мыши - откроется окно аналогичное редактированию меню и кнопка, которую ты кликнул будет выделена её строка - команда запуска, копируешь её (строку) и вместо имени плага и функции вводишь данные своего плага. Рядом с той кнопкой появится твоя кнопка.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Ср май 20, 2020 5:52 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO
Примерно понял как настроить.
Плаг в один файл запихнул что бы автодополнение структур было и была странность с текстом(были кракозябры на русском)выяснил что пурик компили все функции в анси(хотя галки в фыйлах стояли утф)с одним файлом скомпилил в юникоде :roll:
Сделал форму стехтгаджетом для вывода теста и я так понял что акелла плаг запускает в отдельном потоке да и структура дата у каждого окна своя.
Надо значит адрес её получать будет чтобы тест на все окна работал. :D


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Ср май 20, 2020 9:45 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Сергейчик писал(а):
и структура дата у каждого окна своя
Наверно указатель на фрейм меняется, если у тебя во FRAMEDATA указан путь к фалу вкладки, то конечно он не будет один на всех. Во вторых, когда ты запускаешь любую функцию плага, то ей всегда передаётся структура, ты получаешь её указатель. Возможно когда ты выбираешь вкладку, то в поле для указателя на FRAMEDATA передаётся другой указатель на текущую вкладку. Потому что вызывая GUI_GetSelText(PeekI(*g_pd)), то есть я принудительно передаю глобальный указатель в функцию полученный при вызове GUI и меняю вкладку и этот же указатель в итоге даёт выделенный текст на той вкладке, которая активна, а значит структура осталась та же, а поля указателей вставляется указатель активной вкладки.

И хотел сказать по структурам. У меня уже была мысль, ведь автор может сам задать выравнивание структур, мы этого не знаем, то есть надо где-то в проекте смотреть выравнивание структур. В итоге если ты выберешь неверное выравнивание, то хоть как ты не подгоняй структуры, на другом процессоре это может вызвать проблему. Так что надо выравнивать так как выравнивает автор.


Сергейчик писал(а):
Как то неверилось с адресом в структуре с типом .q для x86 ну и к примеру dwVerComctl32=0
Мы же от этого давно ушли

Сергейчик писал(а):
Вот как раз и считаю что BooL(bOldWindows.b) =1байт и идёт выравнивание по границе 4байтов
BooL в WinAPI равен 4 байта, на что указал автор DV. Так что при выравнивании -1 и учитывании данных от DV структуры выравниваются правильно, а как будет выравниваться при выравнивании 4 байта, как я сказал выше ты можешь попасть в засаду. Проще спросить автора как выровнять структуры, а не гадать, но по умолчанию я почему то взял стандартный вариант, потому что иначе исходник будет не универсален и для x64 автору бы пришлось указывать наверно директивы для изменения выравнивания 4/8, а с "-1" везде будет универсально, просто выставляешь поля сам, чтобы они были по границам 4 байт и экономили память.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Чт май 21, 2020 7:19 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO
Ну и что что winapi bool равен 4,это структура автора а он компилил её на чём?в с++
врроде бы 1 :D https://ravesli.com/urok-30-razmer-peremennyh-operator-sizeof/
Возможно компилятор автоматом выравнивает поля под процессоры.
Вобщем для true false нужен всего один бит но таких типов переменных нет.а значит с выравниванием подойдёт любой из них. :roll:
Но пурик выдал выравнивание типа под свои задумки потому как смотри пример выше с структурой где переменная.b
выравнять один и тот же тип на границу поля 2 и 4 это странное выравнивание. :?
Если я компилю себе под x86 с переменной nSaveSettings.q (PLUGINDATA)а не с i, с любым выравниванием то это работает с ошибкой включая пуриковский вариант...
Ps:Так что я довно ушёл но вы снова возвратились. 8)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Чт май 21, 2020 8:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11650
Благодарил (а): 4 раз.
Поблагодарили: 502 раз.
Сергейчик писал(а):
выравнять один и тот же тип на границу поля 2 и 4 это странное выравнивание.
То что Си также ровняет не считаешь странным? viewtopic.php?p=94591#p94591

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Чт май 21, 2020 8:43 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
Пётр писал(а):
Сергейчик писал(а):
выравнять один и тот же тип на границу поля 2 и 4 это странное выравнивание.
То что Си также ровняет не считаешь странным? viewtopic.php?p=94591#p94591

Это флуд?
Причём тут ссылка на тестовый код пурика?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Structure aa Align #PB_Structure_AlignC
  a.b
  b.w
  c.i
  d.a
  e.l
EndStructure
 
Debug SizeOf(aa)
Debug OffsetOf(aa\a)
Debug OffsetOf(aa\b)
Debug OffsetOf(aa\c)
Debug OffsetOf(aa\d)
Debug OffsetOf(aa\e)
 


ну выдал он мне
16
0
2
4
8
12
я даже незнаю как это интерпритировать,может расшифруете :?: :D
PS:Как минимум зто не код си чтобы заглянуть внутрь а как максимум бред какойто. :?
Если подумать из первого значения 16=l,i+w=10байт+a+b=по 3байта добавки на двоих,а на w что ненеужно выравнивание? :(


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Чт май 21, 2020 8:55 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Сергейчик писал(а):
Но пурик выдал выравнивание типа под свои задумки

Что это значит? Тип .b = 1 байт, свои задумки обозначены размером, и прописаны в справке. Поля будут размером обозначенным в справке. Ну допустим 01 или 0001 насколько тебя это волнует? Задав границу 4 байт, у тебя всё равно будет потеряно из памяти 4 байт, смысл тогда задавать True байтом и добавлять исправление границ. Теоретически байт 00000001, тут можно 8 ячеек для True задать - битовые флаги. Мы же речь ведём не о том сколько хватит памяти для True, а только о том, чтобы при всех различных условиях AkelPad создавая структуры адреса начала каждого поля наш плагин точно определял, то есть создавал бы туже размерность. Мы же не будем сейчас указывать автору переделать структуру и заставлять всех авторов плагов переписывать плаги.

Цитата:
Ну и что что winapi bool равен 4,это структура автора а он компилил её на чём?
там можно создавать свои типы, у winapi свои заголовочные файлы со своими типами, так что компилятор будет брать не свой тип bool, а BOOL из winapi.

Погугли строку
Цитата:
Многие функции из WinAPI возвращают или принимают тип BOOL. Который на самом деле int


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Чт май 21, 2020 9:10 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11650
Благодарил (а): 4 раз.
Поблагодарили: 502 раз.
Сергейчик писал(а):
Причём тут ссылка на тестовый код пурика?
Открой спойлер. Там код на Си.
Выложу картинку без спойлера.

Изображение

Выравнивание как в PB.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Чт май 21, 2020 9:22 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
Пётр писал(а):
Сергейчик писал(а):
Причём тут ссылка на тестовый код пурика?
Открой спойлер. Там код на Си.
Выложу картинку без спойлера.

Изображение

Выравнивание как в PB.

Это выравнивание?даже если брать по адресам
a.b=0+1 выравнивание
b.w=2;нет выравнивания
c.i=4+свои 4байта
d.a=8+3 байта выравнивания
e.l
Вывод это не выровненная структура си+непонятки с первым типом.
Мы же в пурике добавляем на структуру директиву выравнивания align(скорее асму). :roll:


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB