Автор
Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
sims
У меня PB 5.10, да и основной проблемы оно не решает.
У меня PB 5.10, да и основной проблемы оно не решает.
Какова основная проблема?основной проблемы оно не решает
Какова основная проблема?
ИМХО преимущества перед обычными dll нет, но требует регистрации в системе, что минус.
$hObjectDll = DllOpen('class.dll')
$oObj = CreateObject($hObjectDll)
If IsObj($oObj) Then
$pMem = $oObj.AllocateMemory(256)
$Size = $oObj.MemorySize($pMem)
$tBuffer = DllStructCreate('byte[' & $Size & ']', $pMem)
DllStructSetData($tBuffer, 1, 'Hello')
$tBuffer = 0
$tBuffer = DllStructCreate('byte[' & $Size & ']', $pMem)
MsgBox(0, '', BinaryToString(DllStructGetData($tBuffer, 1)))
$oObj.FreeMemory($pMem)
$oObj.ReleaseObj()
$oObj = 0
EndIf
DllClose($hObjectDll)
Func CreateObject($hObjectDll)
Local $oRet = DllCall($hObjectDll, 'idispatch*', 'CreateObject')
If ((Not @error) And IsArray($oRet) And IsObj($oRet[0])) Then
Return $oRet[0]
EndIf
Return 0
EndFunc
EnableExplicit
Enumeration
#RELEASEOBJ
#ALLOCATEMEMORY
#MEMORYSIZE
#FREEMEMORY
EndEnumeration
Structure API_OBJ
*VTable
cntRef.l
*own.IUnknown
EndStructure
Declare.l API__AllocateMemory(*self, size.l, *result = 0)
Declare.l API__MemorySize(*self, *memid, *result = 0)
Declare API__PokeString(*self, *memid, *string)
Declare API__FreeMemory(*self, *memid)
ProcedureDLL CreateObject()
Protected *object.API_OBJ
*object = AllocateMemory(SizeOf(API_OBJ))
If *object
*object\VTABLE = ?Methods
*object\own = *object
*object\own\AddRef()
ProcedureReturn *object
EndIf
ProcedureReturn 0
EndProcedure
Procedure.l API__QueryInterface(*self.API_OBJ, *iid.IID, *object.Integer)
If CompareMemory(*iid, ?IID_IUnknown, 16)
*object\i = *self
*self\own\AddRef()
ProcedureReturn #S_OK
EndIf
*Object\i = 0
ProcedureReturn #E_NOINTERFACE
EndProcedure
Procedure.l API__AddRef(*self.API_OBJ)
*self\cntRef + 1
ProcedureReturn *self\cntRef
EndProcedure
Procedure.l API__Release(*self.API_OBJ)
If *self\cntRef > 1
*self\cntRef - 1
ProcedureReturn *self\cntRef
EndIf
FreeMemory(*self)
ProcedureReturn 0
EndProcedure
Procedure.l API__GetTypeInfoCount(*self.API_OBJ, *CntTypeInfo.Long)
*CntTypeInfo\l = 0
ProcedureReturn #S_OK
EndProcedure
Procedure.l API__GetTypeInfo(*self.API_OBJ, TypeInfo.l, LocalId.l, *ppTypeInfo.Integer)
ProcedureReturn #S_OK
EndProcedure
Procedure.l API__GetIDsOfNames(*self.API_OBJ, *iid.IID, *Name.String, cntNames.l, lcid.l, *DispId.Long)
Select *Name\s
Case "ReleaseObj"
*DispId\l = #RELEASEOBJ
Case "AllocateMemory"
*DispId\l = #ALLOCATEMEMORY
Case "MemorySize"
*DispId\l = #MEMORYSIZE
Case "FreeMemory"
*DispId\l = #FREEMEMORY
EndSelect
EndProcedure
Procedure.l API__Invoke(*self.API_OBJ, DispId.l, *iid.IID, lcid.l, Flags.w, *DispParams.DISPPARAMS, *vResult.VARIANT, *ExcepInfo, *ArgErr.Integer)
Dim vArg.VARIANT(20)
CopyMemory(*DispParams\rgvarg, @vArg(), 20 * SizeOf(VARIANT))
Select DispId
Case #RELEASEOBJ
API__Release(*self)
Case #ALLOCATEMEMORY
VariantChangeType_(vArg(0), vArg(0), 0, #VT_I4)
*vResult\vt = #VT_I4
*vResult\byref = API__AllocateMemory(*self, vArg(0)\lVal)
Case #MEMORYSIZE
VariantChangeType_(vArg(0), vArg(0), 0, #VT_I4)
*vResult\vt = #VT_I4
*vResult\lVal = API__MemorySize(*self, vArg(0)\byref)
Case #FREEMEMORY
VariantChangeType_(vArg(0), vArg(0), 0, #VT_I4)
API__FreeMemory(*self, vArg(0)\byref)
EndSelect
EndProcedure
Procedure.l API__AllocateMemory(*self.API_OBJ, size.l, *res.Long=0)
Define *result = AllocateMemory(size)
If *res
*res\l = *result
EndIf
ProcedureReturn *result
EndProcedure
Procedure.l API__MemorySize(*self.API_OBJ, *memid, *res.Long=0)
Define result.l = 0
If *memid
result = MemorySize(*memid)
If *res
*res\l = result
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure API__FreeMemory(*self.API_OBJ, *memid)
If *memid
FreeMemory(*memid)
EndIf
EndProcedure
DataSection
Methods:
Data.i @API__QueryInterface()
Data.i @API__AddRef()
Data.i @API__Release()
Data.i @API__GetTypeInfoCount()
Data.i @API__GetTypeInfo()
Data.i @API__GetIDsOfNames()
Data.i @API__Invoke()
Data.i @API__AllocateMemory()
Data.i @API__MemorySize()
Data.i @API__FreeMemory()
IID_IUnknown:
Data.l $00000000
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
EndDataSection
Да, это прибавит им работы, но оно того стоит, ведь упростит разработку. Стоит попросить. Возможно что сделают.
Подразумеваете функции?это локальное.
namespace foo {
int bar;
}
foo::bar = 3
int foo_bar;
foo_bar = 3;
Или разробы что-то не правильно поняли, или они реально не в теме и не знают в чем разница.
namespace foo {
int bar;
};
int main(int argc, char *argv[])
{
using namespace foo;
bar = 6;
return 0;
}
.globl __ZN3foo3barE
.bss
.align 4
__ZN3foo3barE:
.space 4
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
movl $6, __ZN3foo3barE
movl $0, %eax
leave
ret
это часть ООП вроде ну хотя я в c89 не видел примеров с Namespace. только после c++я не понимаю почему разработчики думают что для включения поддержки Namespace в AutoIt, он должен быть объектно-ориентированным.
это что получается что AutoIt старше PureBasic
AutoIt был сделан для автоматизации а не для написания сложных программ
Это может делать так же интерпретатор. Есть же пространство имен в интерпретируемых ЯП, таких как Python, PHP и др.и если честно пространством занимается компилятор преобразовывая обращение вида
То что данная фича появилась в одно время с ООП еще не значит что она без ООП существовать не может.это часть ООП вроде ну хотя я в c89 не видел примеров с Namespace. только после c++
Разробов PB попросили добавить эту фичу и они пошли на встречу. Жаль что разробы автоита не понимают преимуществ. Если переписать библиотеки автоита с учетом разделения на пространства, станет меньше проблем с возможным дублированием функций и переменных.пространство имен в PureBasic появилось с версии 5.20 которая вышла 17 сентября 2013 г. то есть этой фичи 5 мес.
Честно говоря не вижу другого применения автоиту кроме автоматизации.пока мнение о нём не изменится, этот язык не получит достойного признания, им будут пользоваться в рамках хобби или частной компании
Честно говоря не вижу другого применения автоиту кроме автоматизации.Скорость работы скрипта оставляет желать лучшего. Скрипт по сути никак не защищен и получить исходник можно без проблем. Это не позволяет использовать его для более или менее серьезных проектов.