purebasic.info

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

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




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

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
Как то неверилось с адресом в структуре с типом .q для x86 ну и к примеру dwVerComctl32=0
да и #PB_Structure_AlignC=-1 какое то странное выравнивание. :?: (может чё затирает так) :?
вобщем сделал так структуру и вроде бы стало норм. :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
 
Structure  PLUGINDATA Align 4;#PB_Structure_AlignC ;
  cb.l;                           ;;//Size of the structure.
  *pcs.PLUGINCALLSENDW ;               ;;//Pointer to a PLUGINCALLSENDW structure.
  dwSupport.i;                    ;;//If (dwSupport & PDS_GETSUPPORT) != 0, then caller wants to get PDS_* flags without function execution.
  *pFunction;              ;;//Called function name, format "Plugin::Function".
                                      ;;//  const char *pFunction     If bOldWindows == TRUE
                                      ;;//  const wchar_t *pFunction  If bOldWindows == FALSE
  *szFunction;             ;;//Called function name (Ansi).
  *wszFunction;         ;;//Called function name (Unicode).
  lParam.i;                      ;;//Input data.
  hInstanceDLL.i; HINSTANCE            ;;//DLL instance.
  *lpPluginFunction.PLUGINFUNCTION;   ;;//Pointer to a PLUGINFUNCTION structure.
  nUnload.i;                        ;;//See UD_* defines.
  bInMemory.b;                     ;;//Plugin already loaded.
  bOnStart.b;                      ;;//Indicates when function has been called:
                                      ;;//  TRUE  If function called on start-up.
                                      ;;//  FALSE If function called manually.
  *pAkelDir;               ;;//AkelPad directory.
                                      ;;//  const char *pAkelDir      If bOldWindows == TRUE
                                      ;;//  const wchar_t *pAkelDir   If bOldWindows == FALSE
  *szAkelDir;              ;;//AkelPad directory (Ansi).
  *wszAkelDir;          ;;//AkelPad directory (Unicode).
  hInstanceEXE.i; HINSTANCE             ;;//EXE instance.
  *hPluginsStack.STACKPLUGINFUNCTION; ;;//Plugins stack.
  nSaveSettings.i;                  ;;//See SS_* defines.
  hMainWnd.i;                      ;;//Main window.
  *lpFrameData.FRAMEDATA;             ;;//Pointer to a current FRAMEDATA structure.
  hWndEdit.i;                      ;;//Edit window.
  hDocEdit.i;  AEHDOC?                ;;//Edit document.
  hStatus.i;                       ;;//StatusBar window.
  hMdiClient.i;                    ;;//MDI client window (if nMDI == WMD_MDI).
  hTab.i;                          ;;//Tab window        (if nMDI == WMD_MDI || nMDI == WMD_PMDI).
  hMainMenu.i;       ?             ;;//Main menu.
  hMenuRecentFiles.i;  HMENU            ;;//Recent files menu.
  hMenuLanguage.i;  HMENU               ;;//Language menu.
  hPopupMenu.i;   HMENU                 ;;//Right click menu.
   hMainIcon.i;        HICON            ;;//Main window icon handle.
   hGlobalAccel.i;  HACCEL    ?          ;;//Global accelerator table (highest priority).
   hMainAccel.i;   HACCEL               ;;//Main accelerator table (lowest priority).
  bOldWindows.b;                   ;;//Non-Unicode Windows.
  bOldRichEdit.b;                  ;;//Riched20.dll lower then 5.30 (v3.0). Always FALSE.
  dwVerComctl32.i;                ;;//Comctl32.dll version set as MAKELONG(major,minor).
  bAkelEdit.b;                     ;;//AkelEdit control is used. Always TRUE.
  nMDI.i;                           ;;//Window mode, see WMD_* defines.
  *pLangModule;            ;;//Language module file name.
                                      ;;//  const char *pLangModule      If bOldWindows == TRUE
                                      ;;//  const wchar_t *pLangModule   If bOldWindows == FALSE
 *szLangModule;           ;;//Language module file name (Ansi).
  *wszLangModule;       ;;//Language module file name (Unicode).
  hLangModule.i;  HMODULE              ;;//Language module handle.
  wLangSystem.i; LANGID                ;;//System language ID.
  wLangModule.i;  LANGID               ;;//Language module language ID.
EndStructure
 


и тест подкорректировал
Код:
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
58
59
60
61
 
ProcedureCDLL Test_PLUGINDATA(*pd.PLUGINDATA)
        ; Функция не поддерживает автозагрузку
        *pd\dwSupport | #PDS_NOAUTOLOAD
        If *pd\dwSupport & #PDS_GETSUPPORT
                ProcedureReturn
        EndIf
        ;       SendMessage_(*pd\hMainWnd, #WM_COMMAND, #IDM_FILE_OPEN, 0)
;       *pd\bOldRichEdit = 1
        Protected res.s = ""
;       (res \+ )(".+? = " \+ Str\(\*pd\\.+?\) \+ )(", SizeOf = " \+ Str\(SizeOf\(\*pd\\.+?\)\) \+ )(#CRLF\$) - перестановка
        res + "SizeOf = " + Str(SizeOf(*pd\cb)) + ", cb = " + Str(*pd\cb) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\dwSupport)) + ", dwSupport = " + Str(*pd\dwSupport) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wszFunction)) + ", *wszFunction = " + PeekS(*pd\wszFunction, -1, #PB_Ascii) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\lParam)) + ", lParam = " + Str(*pd\lParam) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hInstanceDLL)) + ", hInstanceDLL = " + Str(*pd\hInstanceDLL) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\nUnload)) + ", nUnload = " + Str(*pd\nUnload) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bInMemory)) + ", bInMemory = " + Str(*pd\bInMemory) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bOnStart)) + ", bOnStart = " + Str(*pd\bOnStart) + #CRLF$
                res + "SizeOf = " + Str(SizeOf(*pd\szAkelDir)) + ", *szAkelDir = " + PeekS(*pd\szAkelDir, -1, #PB_Ascii) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wszAkelDir)) + ", *wszAkelDir = " + PeekS(*pd\wszAkelDir, -1, #PB_Unicode) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hInstanceEXE)) + ", hInstanceEXE = " + Str(*pd\hInstanceEXE) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\nSaveSettings)) + ", nSaveSettings = " + Str(*pd\nSaveSettings) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainWnd)) + ", hMainWnd = " + Str(*pd\hMainWnd) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hWndEdit)) + ", hWndEdit = " + Str(*pd\hWndEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hDocEdit)) + ", hDocEdit = " + Str(*pd\hDocEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hStatus)) + ", hStatus = " + Str(*pd\hStatus) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMdiClient)) + ", hMdiClient = " + Str(*pd\hMdiClient) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hTab)) + ", hTab = " + Str(*pd\hTab) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainMenu)) + ", hMainMenu = " + Str(*pd\hMainMenu) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMenuRecentFiles)) + ", hMenuRecentFiles = " + Str(*pd\hMenuRecentFiles) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMenuLanguage)) + ", hMenuLanguage = " + Str(*pd\hMenuLanguage) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hPopupMenu)) + ", hPopupMenu = " + Str(*pd\hPopupMenu) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainIcon)) + ", hMainIcon = " + Str(*pd\hMainIcon) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hGlobalAccel)) + ", hGlobalAccel = " + Str(*pd\hGlobalAccel) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainAccel)) + ", hMainAccel = " + Str(*pd\hMainAccel) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bOldWindows)) + ", bOldWindows = " + Str(*pd\bOldWindows) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bOldRichEdit)) + ", bOldRichEdit = " + Str(*pd\bOldRichEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\dwVerComctl32)) + ", dwVerComctl32 = " + Str(*pd\dwVerComctl32) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bAkelEdit)) + ", bAkelEdit = " + Str(*pd\bAkelEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\nMDI)) + ", nMDI = " + Str(*pd\nMDI) + #CRLF$
                res + "SizeOf = " + Str(SizeOf(*pd\szLangModule)) + ", *wszLangModule = " + PeekS(*pd\szLangModule, -1, #PB_Ascii) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wszLangModule)) + ", *wszLangModule = " + PeekS(*pd\wszLangModule, -1, #PB_Unicode) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\Hlangmodule)) + ", Hlangmodule = " + Str(*pd\Hlangmodule) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wLangSystem)) + ", wLangSystem = " + Str(*pd\wLangSystem) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wLangModule)) + ", wLangModule = " + Str(*pd\wLangModule) + #CRLF$
       
        MessageRequester("Структура PLUGINDATA", res)
 
;       Protected *lpPlug.PLUGINFUNCTION
;       *lpPlug = *pd\lpPluginFunction
;       MessageRequester("Структура PLUGINFUNCTION", PeekS(*lpPlug\wszFunction, 255, #PB_Unicode))
 
        ;       res = PeekS(*pd\wszAkelDir, -1, #PB_Ascii)
        ;       MessageRequester("2", res)
        ;       *pd\bOnStart  - удачно
  ;     MessageRequester("ура", "ура")
       
        ProcedureReturn #UD_NONUNLOAD_ACTIVE ; Не выгружать плагин и установить активный статус
EndProcedure
 



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

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

Посмотри у меня в файле структур, там сверху справка по ширине типов, там указан BOOL = 4 байта, посмотри ссылку на форум AkelPad, там мне автор плага QSearch дал ширину всех типов для WinApi, ну или почти всех, например нет WORD, но понятно, что половина DWORD.
А структуры выравниваются не по границе 4 быйта, а если первы тип 1 байт, а второй 2 байта, то они оба будут в первых 4 байта. Сдвинется на байт двухбайтное поле.


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

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

Посмотри у меня в файле структур, там сверху справка по ширине типов, там указан BOOL = 4 байта, посмотри ссылку на форум AkelPad, там мне автор плага QSearch дал ширину всех типов для WinApi, ну или почти всех, например нет WORD, но понятно, что половина DWORD.
А структуры выравниваются не по границе 4 быйта, а если первы тип 1 байт, а второй 2 байта, то они оба будут в первых 4 байта. Сдвинется на байт двухбайтное поле.

Хочеш сказать что #PB_Structure_AlignC=-1 :?:
Вот как раз и считаю что BooL(bOldWindows.b) =1байт и идёт выравнивание по границе 4байтов для лучшей командной читаемости процессора(когда выровнены данные он типа за один такт читает) :roll:
Ps:Проставил на структурах align 4 и пока верно считываю данные.ты хоть запусти для начала мой пример.
и вот новый. :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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 
ProcedureCDLL Test_PLUGINDATA(*pd.PLUGINDATA)
        ; Функция не поддерживает автозагрузку
        *pd\dwSupport | #PDS_NOAUTOLOAD
        If *pd\dwSupport & #PDS_GETSUPPORT
                ProcedureReturn
        EndIf
        ;       SendMessage_(*pd\hMainWnd, #WM_COMMAND, #IDM_FILE_OPEN, 0)
;       *pd\bOldRichEdit = 1
        Protected res.s = ""
;       (res \+ )(".+? = " \+ Str\(\*pd\\.+?\) \+ )(", SizeOf = " \+ Str\(SizeOf\(\*pd\\.+?\)\) \+ )(#CRLF\$) - перестановка
        res + "SizeOf = " + Str(SizeOf(*pd\cb)) + ", cb = " + Str(*pd\cb) + #CRLF$
        ;
         res +"====structura PLUGINCALLSENDW =====" + #CRLF$
        Protected *pcs.PLUGINCALLSENDW =*pd\pcs,i.i
       
        res + "SizeOf = " + Str(SizeOf(*pcs\dwSupport)) + ", *pcs\dwSupport = "+ Str(*pcs\dwSupport) + #CRLF$
 
        res +"====ENDstructura PLUGINCALLSENDW =====" + #CRLF$
        ;==================================
        res + "SizeOf = " + Str(SizeOf(*pd\dwSupport)) + ", dwSupport = " + Str(*pd\dwSupport) + #CRLF$
         res + "SizeOf = " + Str(SizeOf(*pd\szFunction)) + ", *szFunction = " + PeekS(*pd\szFunction, -1, #PB_Ascii) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wszFunction)) + ", *wszFunction = " + PeekS(*pd\wszFunction, -1, #PB_Unicode) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\lParam)) + ", lParam = " + Str(*pd\lParam) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hInstanceDLL)) + ", hInstanceDLL = " + Str(*pd\hInstanceDLL) + #CRLF$
        ;
  ;==========================
         res +"====structura PLUGINFUNCTION =====" + #CRLF$
        Protected *lpPluginFunction.PLUGINFUNCTION=*pd\lpPluginFunction
        If *pd\bOldWindows=#True
          res + " PLUGINFUNCTION\*pFunction = " + PeekS(*lpPluginFunction\pFunction,-1, #PB_Ascii) + #CRLF$
        ElseIf  *pd\bOldWindows=#False
          res + " PLUGINFUNCTION\*pFunction = " + PeekS(*lpPluginFunction\pFunction,-1, #PB_Unicode) + #CRLF$
        EndIf  
       
          res + " PLUGINFUNCTION\szFunction = " + PeekS(@*lpPluginFunction\szFunction, -1, #PB_Ascii) + #CRLF$
          res + " PLUGINFUNCTION\wszFunction = " + PeekS(@*lpPluginFunction\wszFunction, -1, #PB_Unicode) + #CRLF$
 
 
        res +"====ENDstructura PLUGINFUNCTION =====" + #CRLF$
        ;=====================================================
       
       
        res + "SizeOf = " + Str(SizeOf(*pd\nUnload)) + ", nUnload = " + Str(*pd\nUnload) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bInMemory)) + ", bInMemory = " + Str(*pd\bInMemory) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bOnStart)) + ", bOnStart = " + Str(*pd\bOnStart) + #CRLF$
                res + "SizeOf = " + Str(SizeOf(*pd\szAkelDir)) + ", *szAkelDir = " + PeekS(*pd\szAkelDir, -1, #PB_Ascii) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wszAkelDir)) + ", *wszAkelDir = " + PeekS(*pd\wszAkelDir, -1, #PB_Unicode) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hInstanceEXE)) + ", hInstanceEXE = " + Str(*pd\hInstanceEXE) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\nSaveSettings)) + ", nSaveSettings = " + Str(*pd\nSaveSettings) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainWnd)) + ", hMainWnd = " + Str(*pd\hMainWnd) + #CRLF$
       
       
        ;==============================
        res +"====structura FRAMEDATA =====" + #CRLF$
        Protected *lpFrameData.FRAMEDATA=*pd\lpFrameData
       
        res + "SizeOf = " + Str(SizeOf(*lpFrameData\hWndEditParent)) + ", hWndEditParent = " + Str(*lpFrameData\hWndEditParent) + #CRLF$
       
          res + " *lpFrameData\szFile = " + PeekS(@*lpFrameData\szFile, -1, #PB_Ascii) + #CRLF$
          res + " *lpFrameData\wszFile = " + PeekS(@*lpFrameData\wszFile, -1, #PB_Unicode) + #CRLF$
       
         Protected  *EDITINFO.EDITINFO=@*lpFrameData\EDITINFO
          res + "SizeOf = " + Str(SizeOf(*EDITINFO\hWndEdit)) + ", EDITINFO\hWndEdit = " + Str(*EDITINFO\hWndEdit) + #CRLF$
          ;res + "SizeOf = " + Str(SizeOf(*EDITINFO\hDocEdit)) + ", *EDITINFO\hDocEdit = " + Str(*EDITINFO\hDocEdit) + #CRLF$
    ;res + " *EDITINFO\wszFile = " + PeekS(@*lpFrameData\EDITINFO\wszFile, -1, #PB_Unicode) + #CRLF$   
       
        res +"====ENDstructura FRAMEDATA =====" + #CRLF$
       
       
       
       
       
        res + "SizeOf = " + Str(SizeOf(*pd\hWndEdit)) + ", hWndEdit = " + Str(*pd\hWndEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hDocEdit)) + ", hDocEdit = " + Str(*pd\hDocEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hStatus)) + ", hStatus = " + Str(*pd\hStatus) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMdiClient)) + ", hMdiClient = " + Str(*pd\hMdiClient) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hTab)) + ", hTab = " + Str(*pd\hTab) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainMenu)) + ", hMainMenu = " + Str(*pd\hMainMenu) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMenuRecentFiles)) + ", hMenuRecentFiles = " + Str(*pd\hMenuRecentFiles) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMenuLanguage)) + ", hMenuLanguage = " + Str(*pd\hMenuLanguage) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hPopupMenu)) + ", hPopupMenu = " + Str(*pd\hPopupMenu) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainIcon)) + ", hMainIcon = " + Str(*pd\hMainIcon) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hGlobalAccel)) + ", hGlobalAccel = " + Str(*pd\hGlobalAccel) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\hMainAccel)) + ", hMainAccel = " + Str(*pd\hMainAccel) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bOldWindows)) + ", bOldWindows = " + Str(*pd\bOldWindows) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bOldRichEdit)) + ", bOldRichEdit = " + Str(*pd\bOldRichEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\dwVerComctl32)) + ", dwVerComctl32 = " + Str(*pd\dwVerComctl32) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\bAkelEdit)) + ", bAkelEdit = " + Str(*pd\bAkelEdit) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\nMDI)) + ", nMDI = " + Str(*pd\nMDI) + #CRLF$
                res + "SizeOf = " + Str(SizeOf(*pd\szLangModule)) + ", *wszLangModule = " + PeekS(*pd\szLangModule, -1, #PB_Ascii) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wszLangModule)) + ", *wszLangModule = " + PeekS(*pd\wszLangModule, -1, #PB_Unicode) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\Hlangmodule)) + ", Hlangmodule = " + Str(*pd\Hlangmodule) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wLangSystem)) + ", wLangSystem = " + Str(*pd\wLangSystem) + #CRLF$
        res + "SizeOf = " + Str(SizeOf(*pd\wLangModule)) + ", wLangModule = " + Str(*pd\wLangModule) + #CRLF$
       
        MessageRequester("Структура PLUGINDATA", res)
 
        ;Protected *lpPlug.PLUGINFUNCTION
;       *lpPlug = *pd\lpPluginFunction
        ;MessageRequester("Структура PLUGINFUNCTION", PeekS(*lpPlug\wszFunction, 255, #PB_Unicode))
 
        ;       res = PeekS(*pd\wszAkelDir, -1, #PB_Ascii)
        ;       MessageRequester("2", res)
        ;       *pd\bOnStart  - удачно
  ;     MessageRequester("ура", "ура")
        Test_PLUGINDATA2(*pd.PLUGINDATA)
        ProcedureReturn #UD_NONUNLOAD_ACTIVE ; Не выгружать плагин и установить активный статус
EndProcedure
 
 



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

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


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

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

У меня твой пример некорректно данные структуры показывал,а в X64 возможно нужно выравнивать на 8байт :?: :wink:
Ps:Пока с структуры FRAMEDATA читаю потихоньку двигаясь вперёд. много повторов всяких заложенно в структурах. :D


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11650
Благодарил (а): 4 раз.
Поблагодарили: 502 раз.
Сергейчик писал(а):
Хочеш сказать что #PB_Structure_AlignC=-1
Разве нет?
Код:
1
Debug #PB_Structure_AlignC

Использование этой константы позволяет выравнивать структуры как в языке C\C++.

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
Пётр писал(а):
Сергейчик писал(а):
Хочеш сказать что #PB_Structure_AlignC=-1
Разве нет?
Код:
1
Debug #PB_Structure_AlignC

Использование этой константы позволяет выравнивать структуры как в языке C\C++.

Прочитай для чего выравнивание делается и скажи что ассемблер фасм будет делать при -1,
и что это за выравнивание тогда такое. :?: :roll:
PS:запускаем и наслаждаемся косяками,что делает компилятор в первом случае?он сначала выравнивает первую переменную на границу 2 байт после доходит до переменной dd и её выравнивает на 4байта. :?
вторая структура чётко идёт по границе 4байта. 8) ,таким оброзом как написано в книге(скриншот align)проц деля на постоянную величину смещение при заборе банных в первом случае пролетает мимо. :roll:
Ну и понятно что не важно становится какой тип будет переменной в пределах поля выравнивания всё равно следующие переменные будут корректны(если только в пределах своего поля по типу непройдёт по значению какая то). :wink:
Код:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
 
#RazmerMemory=$80000000
#RazmerByte=1
#RazmerWord=2
#RazmerDword=4
#RazmerQword=8
 
Global STROKAm.s=Space(500)
Procedure.i GetMemoryHex(*bait,type.i,type2.i);Вывод байтов  из памяти в строковый буфер как hex значения в символьном юникоде utf-16
;
!PUSH esi
!PUSH edi
!PUSH ecx
;
!MOV dword edi,[v_STROKAm];Загружаем адрес буфера глобальной строковой переменной для вывода
!mov dword esi,[p.p_bait+12]
!
!and dword [p.v_type2+12],$7FFFFFFF
!jz netr
!mov dword ecx,[p.v_type+12]
!imul dword ecx,[p.v_type2+12]
!mov dword [p.v_type+12],ecx
!netr:
!add dword [p.v_type+12],esi
 
 
!mov dword ecx,[p.v_type2+12]
!rkb6:
!
!movzx eax,byte ptr esi+ecx-1;al;расширяем до 32 бит с старшими быйтми с нулями=32 битное число
!mov dword eax,[Table_HEX+eax*4];*4 смещение в таблице по полю dword(2 символа )
;
!MOV dword[edi],eax
!add dword edi,4
;
;!movzx eax,byte ptr esi+ecx;al;расширяем до 32 бит с старшими быйтми с нулями=32 битное число
;!mov dword eax,[Table_HEX+eax*4];*4 смещение в таблице по полю dword(2 символа )
;
;!mov dword[edi],eax
;!add dword edi,4
;!add esi,2
 
!sub dword ecx,1
!cmp dword ecx,0
!jnz rkb6
!mov dword ecx,[p.v_type2+12]
!MOV dword[edi],0a000dh
!add dword edi,4
 
!add esi,[p.v_type2+12]
!cmp dword esi,[p.v_type+12]
!jl rkb6
 
 
 
!mov word [edi],0h
!mov dword eax,esi
!pop ecx
!Pop edi
!Pop esi
;
!retn 12
;{;
DataSection
!Table_HEX:
;     0 1 2 3 4 5 6 7 8 9 A B C D E F
!du '000102030405060708090A0B0C0D0E0F';0F
!du '101112131415161718191A1B1C1D1E1F';1F
!du '202122232425262728292A2B2C2D2E2F';2F
!du '303132333435363738393A3B3C3D3E3F';3F
!du '404142434445464748494A4B4C4D4E4F';4F
!du '505152535455565758595A5B5C5D5E5F';5F
!du '606162636465666768696A6B6C6D6E4F';6F
!du '707172737475767778797A7B7C7D7E7F';7F
!du '808182838485868788898A8B8C8D8E8F';8F
!du '909192939495969798999A9B9C9D9E9F';9F
!du 'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF';AF
!du 'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF';BF
!du 'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF';CF
!du 'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF';DF
!du 'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF';EF
!du 'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF',0;FF
;================NORMAL OPCODES================
EndDataSection
;};
EndProcedure
 
Structure aa Align #PB_Structure_AlignC
  a.b
  b.w
  c.i
  d.a
  e.l
EndStructure
 Structure bb Align 4
  a.b
  b.w
  c.i
  d.a
  e.l
EndStructure
 
 
Global a.aa
a\a=$aa
a\b=$bbbb
a\c=$cccccccc
a\d=$dd
a\e=$eeeeeeee
Global b.bb
b\a=$aa
b\b=$bbbb
b\c=$cccccccc
b\d=$dd
b\e=$eeeeeeee
 
 
 
GetMemoryHex(@a,SizeOf(a),#RazmerMemory|#RazmerByte)
Debug @aa
Debug STROKAm
 
GetMemoryHex(@b,SizeOf(b),#RazmerMemory|#RazmerByte)
Debug @bb
Debug STROKAm
 



Вложения:
Комментарий к файлу: Align выравнивание
align.png [129.62 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 6:07 pm 
Не в сети
профессор

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

Кстати, ты пользуешься AkelPad? Так серьёзно подошёл к задаче...

Цитата:
и скажи что ассемблер фасм будет делать при -1
может компилятор как-то выравнивает структуры? Язык С++ это ведь тоже не конечный, это тоже надстройка над асм, поэтому если он как то выравнивает, то наверно и компилятор PureBasic как то выравнивает.

Сергейчик
Сейчас у меня проблему вызывает эта структура/функция
Код:
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 Test_PLUGINFUNCTION(*pd.PLUGINDATA)
        Protected *pf.PLUGINFUNCTION = *pd\lpPluginFunction
        ; Функция не поддерживает автозагрузку
        *pd\dwSupport | #PDS_NOAUTOLOAD
        If *pd\dwSupport & #PDS_GETSUPPORT
                ProcedureReturn
        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)
        ProcedureReturn #UD_NONUNLOAD_ACTIVE ; Не выгружать плагин и установить активный статус
EndProcedure



Мне надо будет с помощью неё проверить загружен ли плаг "Coder::HighLight", и если нет то завершить свой плаг, так как он работает на вызове последнего.
Код:
1
2
3
4
5
6
7
8
9
ProcedureCDLL isHighlightMainActive(*g_Plugin.PLUGINDATA)
        Protected *pf.PLUGINFUNCTION
        *pf = *g_Plugin\lpPluginFunction
        SendMessage_(*g_Plugin\hMainWnd, #AKD_DLLFINDW, @"Coder::HighLight", 0)
        If *pf & *pf\bRunning ; если флаг запуска True, то
                MessageRequester("Coder::HighLight", "запущен")
        EndIf
        MessageRequester("Coder::HighLight", "не запущен")
EndProcedure



В структуре szFunction.c[#MAX_PATH] должен быть вроде szFunction.a[#MAX_PATH], ведь ASCII в 2 раза короче юникода, а при ".c" выходит 2 байта оба и ASCII и юникод, тем более после правки я получаю следующее поле nFunctionLen = 26 правильно.


Последний раз редактировалось AZJIO Вс май 17, 2020 8:35 pm, всего редактировалось 5 раз(а).

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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11650
Благодарил (а): 4 раз.
Поблагодарили: 502 раз.
Сергейчик писал(а):
Прочитай для чего выравнивание делается и скажи что ассемблер фасм будет делать при -1,
А причем здесь фасм? Структуры выравнивает компилятор PB.

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 1012
Благодарил (а): 2 раз.
Поблагодарили: 58 раз.
Пункты репутации: 9
AZJIO писал(а):
Сергейчик
Из описания, которое я давал ссылку ранее выравнивание структур происходит не по 1, 2, 4, 8, а по кратности поля. То есть если поле 2 байта, то оно укладывается по границам так что в предыдущий промежуток укладывается целое число полей шириной 2. Если поле 4 то оно также укладывается так что предыдущий промежуток укладывает целое число полей 4. Видимо это баланс между скоростью и экономичностью. Ни кто конечно не запрещает установить принудительно 4 или 8.

Кстати, ты пользуешься AkelPad? Так серьёзно подошёл к задаче...

Цитата:
и скажи что ассемблер фасм будет делать при -1
может компилятор как-то выравнивает структуры? Язык С++ это ведь тоже не конечный, это тоже надстройка над асм, поэтому если он как то выравнивает, то наверно и компилятор PureBasic как то выравнивает.

Сергейчик
Сейчас у меня проблему вызывает эта структура/функция
Код:
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 Test_PLUGINFUNCTION(*pd.PLUGINDATA)
        Protected *pf.PLUGINFUNCTION = *pd\lpPluginFunction
        ; Функция не поддерживает автозагрузку
        *pd\dwSupport | #PDS_NOAUTOLOAD
        If *pd\dwSupport & #PDS_GETSUPPORT
                ProcedureReturn
        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)
        ProcedureReturn #UD_NONUNLOAD_ACTIVE ; Не выгружать плагин и установить активный статус
EndProcedure



Мне надо будет с помощью неё проверить загружен ли плаг "Coder::HighLight", и если нет то завершить свой плаг, так как он работает на вызове последнего.
Код:
1
2
3
4
5
6
7
8
9
Procedure isHighlightMainActive(*g_Plugin.PLUGINDATA)
        Protected *pf.PLUGINFUNCTION
        ; SendMessage_(*g_Plugin\hMainWnd, #AKD_DLLFINDW, *cszHighlightMain, 0)
        SendMessage_(*g_Plugin\hMainWnd, #AKD_DLLFINDW, @"Coder::HighLight", 0)
        If *pf & *pf\bRunning ; если флаг запуска True, то
                ProcedureReturn 1
        EndIf
    ProcedureReturn 0
EndProcedure


Пользуюсь ли я акелпадом?не особо просто интересно стало. :roll:
Ты хоть запускал мой код?
Вот полный пример закачиваю,только мессаги уже нехввтает у меня для дольнейшего вывода. :D
А то что в примере выше по структурам видно что однобайтовое поле сначала выровнил компилятор(ы)на 2 байта а после на 4 это ерунда какая то. :?


Вложения:
akelplugs.zip [44.37 KiB]
Скачиваний: 13
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 8:47 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Надо эту функцию переделать в 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 и под ником ответить, нажавть кнопку "Ответить".


Последний раз редактировалось AZJIO Вс май 17, 2020 9:00 pm, всего редактировалось 1 раз.

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

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

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


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11650
Благодарил (а): 4 раз.
Поблагодарили: 502 раз.
Сергейчик писал(а):
А то что в примере выше по структурам видно что однобайтовое поле сначала выровнил компилятор(ы)на 2 байта а после на 4 это ерунда какая то.
Это ерунда из Си. Он так ровняет структуры.
Вот тестовый код PB.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

Запустите и найдите отличия по сравнению с Си.
Изображение


Вложения:
AlignC.png [18.24 KiB]
Скачиваний: 0

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин для AkelPad
СообщениеДобавлено: Вс май 17, 2020 9:12 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 615
Благодарил (а): 42 раз.
Поблагодарили: 80 раз.
Пункты репутации: 2
Удалось проверка запущенной функции плага. Хотя мне наверно надо было проверить не запущенность, а наличие, чтобы задействовать.
Код:
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
ProcedureCDLL isHighlightMainActive(*pd.PLUGINDATA)
        Protected *pf.PLUGINFUNCTION
        ; *pf = *pd\lpPluginFunction
        *pf = SendMessage_(*pd\hMainWnd, #AKD_DLLFINDW, @"Coder::HighLight", 0)
        If *pf And *pf\bRunning ; если флаг запуска True, то
                MessageRequester("Coder::HighLight", "запущен")
 
                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$
                If *pd\bOldWindows=#True
                        res + "SizeOf = " + Str(SizeOf(*pf\pFunction)) + ", *pFunction = " + PeekS(*pf\pFunction,-1, #PB_Ascii) + #CRLF$
                ElseIf  *pd\bOldWindows=#False
                        res + "SizeOf = " + Str(SizeOf(*pf\pFunction)) + ", *pFunction = " + PeekS(*pf\pFunction,-1, #PB_Unicode) + #CRLF$
                EndIf
                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)
                ProcedureReturn 1
        EndIf
        MessageRequester("Coder::HighLight", "нет")
        ProcedureReturn 0
EndProcedure



исправил
Код:
1
If *pf And *pf\bRunning


а то если нет плага, то падает AkelPad


Последний раз редактировалось AZJIO Вс май 17, 2020 9:23 pm, всего редактировалось 1 раз.

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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 2


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

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