purebasic.info

PureBasic forum
Текущее время: Вс ноя 19, 2017 3:17 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Пт окт 13, 2017 1:24 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добрый час всем, просьба знающих людей помочь в переводе кода dll, написаном на Delphi, переписать на PureBasik.
Хочу разобраться как переписать плагин на PureBasik, есть несколько исходников примеров, но они написаны на Delphi, знаний в PureBasik мало, но он мне более-менее понятен, а в Delphi вообще дуб. :oops:
Помогите кто чем может.
За ранее благодарю. :D


Вложения:
Комментарий к файлу: Скачать исходник на Delphi.
PlugIn Delphi.rar [10.62 KiB]
Скачиваний: 15


Последний раз редактировалось kolya Пт окт 13, 2017 4:53 pm, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 2:26 pm 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 391
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
kolya хоть название программы скажи, для чего собрался плагин писать, чтоб протестировать?
Не помню какой ProcedureDLL или ProcedureCDLL используется Delphi.
И не помню, как заменить правильно PChar, обычно это строка.
Не знаю как заменить на PureBasic.
Вот
Цитата:
{*}TYPE TAddActionProc = PROCEDURE( IDNum : INTEGER;
{*} Name, Hint : PChar;
{*} Params : ARRAY OF BYTE;
{*} NumParams : BYTE );
{*} TAddFileProc = PROCEDURE( FileName : PChar; AddFlag : BOOLEAN );
{*} TVarGetProc = PROCEDURE( VarName : PChar; VAR Value : PChar );
{*} TVarSetProc = PROCEDURE( VarName, Value : PChar );
{*} TPlayActionProc = PROCEDURE( Action : PChar );
{*} TInterfaceProc = FUNCTION( InterfaceID : INTEGER; VAR Data : PChar ) : BOOLEAN;
Вот пример набросал.
Код:
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
ProcedureDLL.b nbEditAction(IDNum.l, Array Params.s())
   
EndProcedure
                     
ProcedureDLL.b nbExecAction(IDNum.l, Array Params.s())
 
EndProcedure
 
ProcedureDLL nbInitPlugIn(WinHandle, PlugInTitle, PlugInPublisher, PlugInHint.s )
 
EndProcedure
 
ProcedureDLL nbRegisterPlugIn(AddActionProc, AddFileProc, VarGetFunc, *VarSetFunc)
 
EndProcedure
 
ProcedureDLL nbRegisterScriptProcessor(*PlayActionProc)
   
EndProcedure
 
  ProcedureDLL nbRegisterInterfaceAccess(*InterfaceProc)
 
  EndProcedure
 
ProcedureDLL.b  DisplayMyMessageBox(aTitle, aMessage.s )



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 4:26 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
@ZOLO@ писал(а):
kolya хоть название программы скажи, для чего собрался плагин писать, чтоб протестировать?
Не помню какой ProcedureDLL или ProcedureCDLL используется Delphi.
И не помню, как заменить правильно PChar, обычно это строка.
Не знаю как заменить на PureBasic.
Вот
Цитата:
{*}TYPE TAddActionProc = PROCEDURE( IDNum : INTEGER;
{*} Name, Hint : PChar;
{*} Params : ARRAY OF BYTE;
{*} NumParams : BYTE );
{*} TAddFileProc = PROCEDURE( FileName : PChar; AddFlag : BOOLEAN );
{*} TVarGetProc = PROCEDURE( VarName : PChar; VAR Value : PChar );
{*} TVarSetProc = PROCEDURE( VarName, Value : PChar );
{*} TPlayActionProc = PROCEDURE( Action : PChar );
{*} TInterfaceProc = FUNCTION( InterfaceID : INTEGER; VAR Data : PChar ) : BOOLEAN;
Вот пример набросал.
Код:
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
ProcedureDLL.b nbEditAction(IDNum.l, Array Params.s())
   
EndProcedure
                     
ProcedureDLL.b nbExecAction(IDNum.l, Array Params.s())
 
EndProcedure
 
ProcedureDLL nbInitPlugIn(WinHandle, PlugInTitle, PlugInPublisher, PlugInHint.s )
 
EndProcedure
 
ProcedureDLL nbRegisterPlugIn(AddActionProc, AddFileProc, VarGetFunc, *VarSetFunc)
 
EndProcedure
 
ProcedureDLL nbRegisterScriptProcessor(*PlayActionProc)
   
EndProcedure
 
  ProcedureDLL nbRegisterInterfaceAccess(*InterfaceProc)
 
  EndProcedure
 
ProcedureDLL.b  DisplayMyMessageBox(aTitle, aMessage.s )


Благодарю за отклик.

Программа называется NB, тоже язык программирования.
Выложить на форум не могу, пишет большой файл.
Скинул себе на почту, скачать можно по ссылке http://wdatt.bigmir.net/upl/4/6/5096964_205405724/NB.rar. Если нужно могу скинуть русификатор на NB.

Басик ругается.
Что-то в приведенном вами примере не так.
К стати там расширение у плагина *.Dll нужно менять *.nbp иначе прога NB не увидит плагин.


Вложения:
Error.jpeg [538.62 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 5:52 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11054
Благодарил (а): 4 раз.
Поблагодарили: 379 раз.
kolya писал(а):
Программа называется NB
NB это не название, а сокращение. Программа называется NeoBook.
В архиве SDK для разработки плагинов.


Вложения:
nbwpluginsdk.zip [245.23 KiB]
Скачиваний: 20

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 6:43 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
kolya писал(а):
Программа называется NB
NB это не название, а сокращение. Программа называется NeoBook.
В архиве SDK для разработки плагинов.


Благодарю конечно но, зачем(В архиве SDK для разработки плагинов.) он мне ?, один из этих примеров самый маленький, (что-бы не нагружать ни кого да и самому что-бы легче было потом разобратся) я и привел для знающих людей язык Delphi, что-бы помогли чем смогут. Я перед обращением сюда, и справку переводил(а вы знаете как гугл переводит. хрен поймёшь что к чему) и сам пытался создать плагин и форум весь перелопатил в надежде найти для себя ответы, результата 0. и вот так уже 4 дня сижу над этим всем.
Если можете толкните в нужное русло примером :oops:


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 7:15 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11054
Благодарил (а): 4 раз.
Поблагодарили: 379 раз.
kolya писал(а):
зачем(В архиве SDK для разработки плагинов.) он мне
Раз попросили помощи в переводе, то SDK может пригодится тем кто будет помогать. Мне к примеру проще перевести в Си чем с дельфи.

kolya писал(а):
сам пытался создать плагин и форум весь перелопатил в надежде найти для себя ответы, результата 0
Что именно не получилось?

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 7:58 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11054
Благодарил (а): 4 раз.
Поблагодарили: 379 раз.
Не знаю будет работать или нет. Не проверял.
Код:
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#ACTIONPARAM_NONE     = 0
#ACTIONPARAM_ALPHA    = 1
#ACTIONPARAM_ALPHASP  = 2
#ACTIONPARAM_NUMERIC  = 3
#ACTIONPARAM_MIXED    = 4
#ACTIONPARAM_FILENAME = 5
#ACTIONPARAM_VARIABLE = 6
#ACTIONPARAM_DATAFILE = 7
 
#MaxActionParams = 10
 
EnableExplicit
 
Structure pCharArray
  Arr.s[#MaxActionParams]
EndStructure
 
Prototype AddActionProcType(IDNum, Name.s, Hint.s, *Params)
Prototype AddFileProcType(s.s, AddFlag)
Prototype GetVarProcType(VarName.s, *Value.String)
Prototype SetVarProcType(VarName.s, Value.s)
Prototype PlayActionProcType(s.s)
Prototype InterfaceProcType(InterfaceID, sData.s)
Prototype dllHandlerProcType(Reason)
 
Global xnbAddAction.AddActionProcType
Global nbAddFile.AddFileProcType
Global nbGetVar.GetVarProcType
Global nbSetVar.SetVarProcType
Global nbPlayAction.PlayActionProcType
Global nbInterface.InterfaceProcType
Global nbWinHandle.i
 
EnableASM
 
Procedure FreeStr(*S.Integer)
  If *S<>0 And *S\i<>0
    GlobalFree_(*S\i)
    *S\i=0
  EndIf
EndProcedure
 
Procedure SetStr(*Dest.Integer, Source.s)
  If *Dest
    FreeStr(*Dest)
    If Len(Source)>0
      *Dest\i = GlobalAlloc_(#GMEM_FIXED, Len(Source) + 1)
      If *Dest\i
        PokeS(*Dest\i, Source)
      EndIf
    EndIf
  EndIf
EndProcedure
 
Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams)
 
  PUSH eax
  XOR eax,eax
  MOV al,NumParams
  PUSH eax
  PUSH eax
 
  xnbAddAction(IDNum,Name,Hint,*Params)
 
  POP eax
EndProcedure
 
 
 
 
 
 
 
 
ProcedureDLL nbEditAction(IDNum, *Params.pCharArray)
 
  Select IDNum
    Case 1
  EndSelect
 
  ProcedureReturn #True
EndProcedure
 
 
ProcedureDLL nbExecAction(IDNum, *Params.pCharArray)
 
  Select IDNum
    Case 1
  EndSelect
 
  ProcedureReturn 0
 
EndProcedure
 
 
ProcedureDLL nbMessage(MsgCode, Reserved)
 
  Select MsgCode
    Case 1
    Case 2
    Case 3
    Case 4
    Case 5
    Case 6
  EndSelect
 
EndProcedure
 
 
ProcedureDLL nbInitPlugIn(WinHandle, *PlugInTitle, *PlugInPublisher, *PlugInHint)
  nbWinHandle = WinHandle
 
  SetStr(*PlugInTitle, "Sample Plug-In");
  SetStr(*PlugInPublisher, "John Doe");
  SetStr(*PlugInHint, "Use this plug-in to display a Windows message box");
EndProcedure
 
 
ProcedureDLL nbRegisterScriptProcessor(*PlayActionProc)
  nbPlayAction = *PlayActionProc
EndProcedure
 
 
ProcedureDLL nbRegisterInterfaceAccess(*InterfaceProc)
  nbInterface = *InterfaceProc
EndProcedure
 
ProcedureDLL nbRegisterPlugIn(*AddActionProc, *AddFileProc, *VarGetFunc, *VarSetFunc)
  nbGetVar=*VarGetFunc;
  nbSetVar=*VarSetFunc;
  xnbAddAction=*AddActionProc;
  nbAddFile=*AddFileProc;
EndProcedure
 
 
ProcedureDLL AttachProcess(Instance) ; Загрузка плагна
 
EndProcedure
 
ProcedureDLL DetachProcess(Instance) ; Выгрузка плагина.
 
EndProcedure



Вложения:
NeoBook_Plugin.zip [2.8 KiB]
Скачиваний: 12

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 8:19 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Не знаю будет работать или нет. Не проверял.
Код:
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#ACTIONPARAM_NONE     = 0
#ACTIONPARAM_ALPHA    = 1
#ACTIONPARAM_ALPHASP  = 2
#ACTIONPARAM_NUMERIC  = 3
#ACTIONPARAM_MIXED    = 4
#ACTIONPARAM_FILENAME = 5
#ACTIONPARAM_VARIABLE = 6
#ACTIONPARAM_DATAFILE = 7
 
#MaxActionParams = 10
 
EnableExplicit
 
Structure pCharArray
  Arr.s[#MaxActionParams]
EndStructure
 
Prototype AddActionProcType(IDNum, Name.s, Hint.s, *Params)
Prototype AddFileProcType(s.s, AddFlag)
Prototype GetVarProcType(VarName.s, *Value.String)
Prototype SetVarProcType(VarName.s, Value.s)
Prototype PlayActionProcType(s.s)
Prototype InterfaceProcType(InterfaceID, sData.s)
Prototype dllHandlerProcType(Reason)
 
Global xnbAddAction.AddActionProcType
Global nbAddFile.AddFileProcType
Global nbGetVar.GetVarProcType
Global nbSetVar.SetVarProcType
Global nbPlayAction.PlayActionProcType
Global nbInterface.InterfaceProcType
Global nbWinHandle.i
 
EnableASM
 
Procedure FreeStr(*S.Integer)
  If *S<>0 And *S\i<>0
    GlobalFree_(*S\i)
    *S\i=0
  EndIf
EndProcedure
 
Procedure SetStr(*Dest.Integer, Source.s)
  If *Dest
    FreeStr(*Dest)
    If Len(Source)>0
      *Dest\i = GlobalAlloc_(#GMEM_FIXED, Len(Source) + 1)
      If *Dest\i
        PokeS(*Dest\i, Source)
      EndIf
    EndIf
  EndIf
EndProcedure
 
Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams)
 
  PUSH eax
  XOR eax,eax
  MOV al,NumParams
  PUSH eax
  PUSH eax
 
  xnbAddAction(IDNum,Name,Hint,*Params)
 
  POP eax
EndProcedure
 
 
 
 
 
 
 
 
ProcedureDLL nbEditAction(IDNum, *Params.pCharArray)
 
  Select IDNum
    Case 1
  EndSelect
 
  ProcedureReturn #True
EndProcedure
 
 
ProcedureDLL nbExecAction(IDNum, *Params.pCharArray)
 
  Select IDNum
    Case 1
  EndSelect
 
  ProcedureReturn 0
 
EndProcedure
 
 
ProcedureDLL nbMessage(MsgCode, Reserved)
 
  Select MsgCode
    Case 1
    Case 2
    Case 3
    Case 4
    Case 5
    Case 6
  EndSelect
 
EndProcedure
 
 
ProcedureDLL nbInitPlugIn(WinHandle, *PlugInTitle, *PlugInPublisher, *PlugInHint)
  nbWinHandle = WinHandle
 
  SetStr(*PlugInTitle, "Sample Plug-In");
  SetStr(*PlugInPublisher, "John Doe");
  SetStr(*PlugInHint, "Use this plug-in to display a Windows message box");
EndProcedure
 
 
ProcedureDLL nbRegisterScriptProcessor(*PlayActionProc)
  nbPlayAction = *PlayActionProc
EndProcedure
 
 
ProcedureDLL nbRegisterInterfaceAccess(*InterfaceProc)
  nbInterface = *InterfaceProc
EndProcedure
 
ProcedureDLL nbRegisterPlugIn(*AddActionProc, *AddFileProc, *VarGetFunc, *VarSetFunc)
  nbGetVar=*VarGetFunc;
  nbSetVar=*VarSetFunc;
  xnbAddAction=*AddActionProc;
  nbAddFile=*AddFileProc;
EndProcedure
 
 
ProcedureDLL AttachProcess(Instance) ; Загрузка плагна
 
EndProcedure
 
ProcedureDLL DetachProcess(Instance) ; Выгрузка плагина.
 
EndProcedure



Благодарю вас. :D
Простите за наглость, но что то ошибку выдаёт при компиляции, и при попытке установить его NB виснет,(то что NB виснет это понятно код сырой думаю разберусь).
Может подскажите что за ошибка. :oops:
И еще вопрос, там в делфи в начале программы загружается ресурс иконки, не подскажите как тут загрузить?.
Так можно
(Import "NeoBook_Test.RES" : EndImport)


Вложения:
Error.jpeg [224.05 KiB]
Скачиваний: 0


Последний раз редактировалось kolya Пт окт 13, 2017 8:28 pm, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 8:26 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11054
Благодарил (а): 4 раз.
Поблагодарили: 379 раз.
В текущей версии это не вызывает ошибку. Должно быть
Код:
1
Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams.b)


kolya писал(а):
в делфи в начале программы загружается ресурс иконки
Зачем иконка в DLL? Она все равно отображаться не будет.
Добавить иконку или ресурс можно в настройках компилятора из меню компилятор.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 8:34 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
В текущей версии это не вызывает ошибку. Должно быть
Код:
1
Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams.b)



Да в этом была причина. :D

Пётр писал(а):
kolya писал(а):
в делфи в начале программы загружается ресурс иконки
Зачем иконка в DLL? Она все равно отображаться не будет.
Добавить иконку или ресурс можно в настройках компилятора из меню компилятор.

А иконка нужна, она отображается при выборе плагина, возможно по этому NB и виснет.


Вложения:
ico.jpeg [200.73 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 13, 2017 11:26 pm 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 391
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
kolya, на скорую руку набросал пример, забыл добавить 1 в "Array Params.s(1)"


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 14, 2017 5:40 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр, добрый час.
Хочу обратится до вас с просьбой.
Не могли-бы вы в свободное для вас время набросать код, если не затруднит в соответствии с исходником и по возможности с коментами(сами понимаете, на примере легче учится). Некоторые фрагменты исходного кода, вы в приведенный вами код не вписали.
Я пытался сам разобраться, но просидел до 4-х утра и сегодня целый день, понял что без вашей помощи не обойтись, пробовал так-же для начала форму в длл создать и потом вызвать. Но нефинта не выходит, то-есть форма в длл создаётся но не могу её вызвать(понять не могу как. В голове каша), и в программе для просмотра ресурсов EXE,DLL нет окон, только иконка и Manifest(ниже фото2), а вот если в делфи откомпилить исходник(тот что я просил перевести на пурик), то там и окно есть и курсор(ниже фото1).


В сполере переведенный вами код, с моей формой окна.
Пётр писал(а):
Не знаю будет работать или нет. Не проверял.
Код:
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
;{Обьявляем перименные, константы, загружаем иконку *.Res
#ACTIONPARAM_NONE     = 0
#ACTIONPARAM_ALPHA    = 1
#ACTIONPARAM_ALPHASP  = 2
#ACTIONPARAM_NUMERIC  = 3
#ACTIONPARAM_MIXED    = 4
#ACTIONPARAM_FILENAME = 5
#ACTIONPARAM_VARIABLE = 6
#ACTIONPARAM_DATAFILE = 7
 
#MaxActionParams = 10
 
Import "NeoBook_Test.res" : EndImport
 
EnableExplicit
 
Structure pCharArray
  Arr.s[#MaxActionParams]
EndStructure
 
Prototype AddActionProcType(IDNum, Name.s, Hint.s, *Params)
Prototype AddFileProcType(s.s, AddFlag)
Prototype GetVarProcType(VarName.s, *Value.String)
Prototype SetVarProcType(VarName.s, Value.s)
Prototype PlayActionProcType(s.s)
Prototype InterfaceProcType(InterfaceID, sData.s)
Prototype dllHandlerProcType(Reason)
 
Global xnbAddAction.AddActionProcType
Global nbAddFile.AddFileProcType
Global nbGetVar.GetVarProcType
Global nbSetVar.SetVarProcType
Global nbPlayAction.PlayActionProcType
Global nbInterface.InterfaceProcType
Global nbWinHandle.i
 
EnableASM
;}
 
 
Procedure FreeStr(*S.Integer)
  If *S<>0 And *S\i<>0
    GlobalFree_(*S\i)
    *S\i=0
  EndIf
EndProcedure
 
 
Procedure SetStr(*Dest.Integer, Source.s)
  If *Dest
    FreeStr(*Dest)
    If Len(Source)>0
      *Dest\i = GlobalAlloc_(#GMEM_FIXED, Len(Source) + 1)
      If *Dest\i
        PokeS(*Dest\i, Source)
      EndIf
    EndIf
  EndIf
EndProcedure
 
 
Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams.b)
 
 
  PUSH eax
  XOr eax,eax
  MOV al,NumParams
  PUSH eax
  PUSH eax
 
  xnbAddAction(IDNum,Name,Hint,*Params)
 
  POP eax
   
EndProcedure
 
 
Procedure EditMyMessageBox()
 
 
;{Здесь обьявляем перименные и константы для окна и гаджетов на нём
 Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Enumeration
  #Button_0    ;Кнопка выход.
  #Button_1    ;Кнопка применить.
  #Stroka_1    ;Константа для вывода текста, в Заголовок Окна
  #Stroka_2    ;Константа для вывода текста, в Сообщение Окне
  #Text_1
  #Text_2
EndEnumeration
;}
 
;{Здесь создадим форму, и различные гаджеты на ней
If OpenWindow(0, 450, 200, 306, 215, "Вывести сообщение в Windows", #PB_Window_TitleBar|#PB_Window_SystemMenu)
 ButtonGadget(#Button_0, 170, 160, 100, 25, "Выход");Кнопка выход.
  GadgetToolTip(#Button_0, "Закрыть Программу.");Всплывающая подсказка.
 ButtonGadget(#Button_1, 20, 160, 100, 25, "Применить");Кнопка применить.
  GadgetToolTip(#Button_1, "Применить изминения.");Всплывающая подсказка.
    StringGadget(#Stroka_1, 140, 15, 155, 25, "");Выводит Заголовок Окна.
    StringGadget(#Stroka_2, 140, 45, 155, 25, "");Выводит Сообщение в Окне.
    TextGadget(#Text_1, 5, 20, 110, 20, "Заголовок Окна")
    TextGadget(#Text_2, 5, 50, 130, 20, "Сообщение в Окне")
 ;}
 
;{Здесь показуем фору и работаем с событиями гаджетов
 
HideWindow(0,0);
Repeat
 
  Event=WaitWindowEvent()
;Обработчик событий
If Event=#PB_Event_Gadget
 
;Здесь обработка кнопки Применить.  
  Select EventGadget()
     Case #Button_1              ; Кнопка применить.
;Здесь обработка кнопки выход
    Case #Button_0               ;Кнопка выход.
    Event=#PB_Event_CloseWindow
EndSelect
EndIf
 
Until Event=#PB_Event_CloseWindow
EndProcedure
 
;}
 
 
ProcedureDLL nbEditAction(IDNum, *Params.pCharArray)
  Select IDNum
    Case 1  
EndSelect
 
  ProcedureReturn #True
EndProcedure
 
 
ProcedureDLL nbExecAction(IDNum, *Params.pCharArray)
 
  Select IDNum
    Case 1
     
  EndSelect
 
  ProcedureReturn 0
 
EndProcedure
 
 
ProcedureDLL nbMessage(MsgCode, Reserved)
 
  Select MsgCode
    Case 1  
    Case 2
    Case 3
    Case 4
    Case 5
    Case 6
  EndSelect
 
EndProcedure
 
 
ProcedureDLL nbInitPlugIn(WinHandle, *PlugInTitle, *PlugInPublisher, *PlugInHint)
  nbWinHandle = WinHandle
 
  SetStr(*PlugInTitle, "Sample Plug-In");
  SetStr(*PlugInPublisher, "John Doe");
  SetStr(*PlugInHint, "Use this plug-in to display a Windows message box");
 
EndProcedure
 
 
ProcedureDLL nbRegisterScriptProcessor(*PlayActionProc)
  nbPlayAction = *PlayActionProc
EndProcedure
 
 
ProcedureDLL nbRegisterInterfaceAccess(*InterfaceProc)
  nbInterface = *InterfaceProc
EndProcedure
 
 
ProcedureDLL nbRegisterPlugIn(*AddActionProc, *AddFileProc, *VarGetFunc, *VarSetFunc)
EndProcedure
 


Просьба отнестись с пониманием.


Вложения:
Комментарий к файлу: Dll После компиляции в Purebasic
фото2.jpeg [108.98 KiB]
Скачиваний: 0
Комментарий к файлу: Dll После компиляции в Delphi
фото1.jpeg [111.07 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 14, 2017 6:37 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11054
Благодарил (а): 4 раз.
Поблагодарили: 379 раз.
kolya писал(а):
Некоторые фрагменты исходного кода, вы в приведенный вами код не вписали.
Я переводил код из архива расположенный в C++ Examples\Example 1.

kolya писал(а):
форма в длл создаётся но не могу её вызвать
Покажите код как создавали.

kolya писал(а):
в программе для просмотра ресурсов EXE,DLL нет окон
Окна не обязательно хранятся в ресурсах.

kolya писал(а):
если в делфи откомпилить исходник(тот что я просил перевести на пурик), то там и окно есть и курсор
В дельфи другой метод хранения форм.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 14, 2017 9:42 pm 
Не в сети
ассистент

Зарегистрирован: Пт окт 13, 2017 12:42 pm
Сообщений: 23
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
kolya писал(а):
Некоторые фрагменты исходного кода, вы в приведенный вами код не вписали.
Я переводил код из архива расположенный в C++ Examples\Example 1.

Вы можете перевиденный вами код прокомментировать, дополнить и прописать в процедуры отсутствующий код.
К примеру что в процедуре nbEditAction.

ProcedureDLL nbEditAction(IDNum, *Params.pCharArray);что тут должно произойти что-бы
Select IDNum;здесь появилася 1
Case 1;а здесь как передать параметры в *Params
EndSelect;

ProcedureReturn #True;здесь думаю результат 1 появляется если вызвали удачно процедуру,так?.
EndProcedure;

Тут вообще не понятно что за код :oops:

Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams.b)
PUSH eax
XOr eax,eax
MOV al,NumParams
PUSH eax
PUSH eax
xnbAddAction(IDNum,Name,Hint,*Params)
POP eax
EndProcedure

kolya писал(а):
форма в длл создаётся но не могу её вызвать
Покажите код как создавали.

В сполере переведенный вами код, с моей формой окна.
Пётр писал(а):
Не знаю будет работать или нет. Не проверял.
Код:
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
;{Обьявляем перименные, константы, загружаем иконку *.Res
#ACTIONPARAM_NONE     = 0
#ACTIONPARAM_ALPHA    = 1
#ACTIONPARAM_ALPHASP  = 2
#ACTIONPARAM_NUMERIC  = 3
#ACTIONPARAM_MIXED    = 4
#ACTIONPARAM_FILENAME = 5
#ACTIONPARAM_VARIABLE = 6
#ACTIONPARAM_DATAFILE = 7
 
#MaxActionParams = 10
 
Import "NeoBook_Test.res" : EndImport
 
EnableExplicit
 
Structure pCharArray
  Arr.s[#MaxActionParams]
EndStructure
 
Prototype AddActionProcType(IDNum, Name.s, Hint.s, *Params)
Prototype AddFileProcType(s.s, AddFlag)
Prototype GetVarProcType(VarName.s, *Value.String)
Prototype SetVarProcType(VarName.s, Value.s)
Prototype PlayActionProcType(s.s)
Prototype InterfaceProcType(InterfaceID, sData.s)
Prototype dllHandlerProcType(Reason)
 
Global xnbAddAction.AddActionProcType
Global nbAddFile.AddFileProcType
Global nbGetVar.GetVarProcType
Global nbSetVar.SetVarProcType
Global nbPlayAction.PlayActionProcType
Global nbInterface.InterfaceProcType
Global nbWinHandle.i
 
EnableASM
;}
 
 
Procedure FreeStr(*S.Integer)
  If *S<>0 And *S\i<>0
    GlobalFree_(*S\i)
    *S\i=0
  EndIf
EndProcedure
 
 
Procedure SetStr(*Dest.Integer, Source.s)
  If *Dest
    FreeStr(*Dest)
    If Len(Source)>0
      *Dest\i = GlobalAlloc_(#GMEM_FIXED, Len(Source) + 1)
      If *Dest\i
        PokeS(*Dest\i, Source)
      EndIf
    EndIf
  EndIf
EndProcedure
 
 
Procedure nbAddAction(IDNum, Name.s, Hint.s, *Params, NumParams.b)
 
 
  PUSH eax
  XOr eax,eax
  MOV al,NumParams
  PUSH eax
  PUSH eax
 
  xnbAddAction(IDNum,Name,Hint,*Params)
 
  POP eax
   
EndProcedure
 
 
Procedure EditMyMessageBox()
 
 
;{Здесь обьявляем перименные и константы для окна и гаджетов на нём
 Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Enumeration
  #Button_0    ;Кнопка выход.
  #Button_1    ;Кнопка применить.
  #Stroka_1    ;Константа для вывода текста, в Заголовок Окна
  #Stroka_2    ;Константа для вывода текста, в Сообщение Окне
  #Text_1
  #Text_2
EndEnumeration
;}
 
;{Здесь создадим форму, и различные гаджеты на ней
If OpenWindow(0, 450, 200, 306, 215, "Вывести сообщение в Windows", #PB_Window_TitleBar|#PB_Window_SystemMenu)
 ButtonGadget(#Button_0, 170, 160, 100, 25, "Выход");Кнопка выход.
  GadgetToolTip(#Button_0, "Закрыть Программу.");Всплывающая подсказка.
 ButtonGadget(#Button_1, 20, 160, 100, 25, "Применить");Кнопка применить.
  GadgetToolTip(#Button_1, "Применить изминения.");Всплывающая подсказка.
    StringGadget(#Stroka_1, 140, 15, 155, 25, "");Выводит Заголовок Окна.
    StringGadget(#Stroka_2, 140, 45, 155, 25, "");Выводит Сообщение в Окне.
    TextGadget(#Text_1, 5, 20, 110, 20, "Заголовок Окна")
    TextGadget(#Text_2, 5, 50, 130, 20, "Сообщение в Окне")
 ;}
 
;{Здесь показуем фору и работаем с событиями гаджетов
 
HideWindow(0,0);
Repeat
 
  Event=WaitWindowEvent()
;Обработчик событий
If Event=#PB_Event_Gadget
 
;Здесь обработка кнопки Применить.  
  Select EventGadget()
     Case #Button_1              ; Кнопка применить.
;Здесь обработка кнопки выход
    Case #Button_0               ;Кнопка выход.
    Event=#PB_Event_CloseWindow
EndSelect
EndIf
 
Until Event=#PB_Event_CloseWindow
EndProcedure
 
;}
 
 
ProcedureDLL nbEditAction(IDNum, *Params.pCharArray)
  Select IDNum
    Case 1  
EndSelect
 
  ProcedureReturn #True
EndProcedure
 
 
ProcedureDLL nbExecAction(IDNum, *Params.pCharArray)
 
  Select IDNum
    Case 1
     
  EndSelect
 
  ProcedureReturn 0
 
EndProcedure
 
 
ProcedureDLL nbMessage(MsgCode, Reserved)
 
  Select MsgCode
    Case 1  
    Case 2
    Case 3
    Case 4
    Case 5
    Case 6
  EndSelect
 
EndProcedure
 
 
ProcedureDLL nbInitPlugIn(WinHandle, *PlugInTitle, *PlugInPublisher, *PlugInHint)
  nbWinHandle = WinHandle
 
  SetStr(*PlugInTitle, "Sample Plug-In");
  SetStr(*PlugInPublisher, "John Doe");
  SetStr(*PlugInHint, "Use this plug-in to display a Windows message box");
 
EndProcedure
 
 
ProcedureDLL nbRegisterScriptProcessor(*PlayActionProc)
  nbPlayAction = *PlayActionProc
EndProcedure
 
 
ProcedureDLL nbRegisterInterfaceAccess(*InterfaceProc)
  nbInterface = *InterfaceProc
EndProcedure
 
 
ProcedureDLL nbRegisterPlugIn(*AddActionProc, *AddFileProc, *VarGetFunc, *VarSetFunc)
EndProcedure
 



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 14, 2017 10:19 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11054
Благодарил (а): 4 раз.
Поблагодарили: 379 раз.
kolya писал(а):
Вы можете перевиденный вами код прокомментировать, дополнить и прописать в процедуры отсутствующий код.
Я понятия не имею как устроены плагины NeoBook. В архиве nbwpluginsdk.zip есть файл NeoBook Plug-In SDK.chm где написано об устройстве плагинов и для чего нужна каждая из процедур.

kolya писал(а):
Тут вообще не понятно что за код
Из файла nbplugin.cpp.
Цитата:
Do not edit. This is to match Delphi's calling conventions.
Это преобразование вызова функции в формат дельфи.

kolya писал(а):
В сполере переведенный вами код, с моей формой окна.
Процедура EditMyMessageBox() нигде не вызывается.

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


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

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


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

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


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

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