Цитата:
Сообщение от Freeman
Он же коммерческий! Чем он лучше Delphi?
|
Ваш вопрос звучит примерно так: - "что лучше отвертка или гаечный ключ?", только не уточняется нужно открутить шуруп или гайку. Надеюсь вы не будете откручивать шуруп гаечным ключом или гайку отверткой?
Лучше PureBasic чем Delphi или хуже зависит от задачи.
Например дельфи 7 только для Windows x86 и с его помощью даже приложение для Windows x64 не скомпилировать. А на PureBasic можно. Также PureBasic поддерживает компиляцию для Linux, MaxOS X и AmigaOS, а дельфи нет.
Разработка DLL в дельфи, по сравнению с PureBasic не имеет преимуществ. ИМХО в PureBasic проще.
А вот что касается разработки драйверов, то тут у дельфи облом. Есть конечно
методы, но там еще те костыли. А в PureBasic довольно просто писать дрова и компилируются они из IDE без всяких батников и подмены линкера (у PureBasic COFF-формат объектных файлов и стандартный линкер).
Примеры драйверов на PureBasic.
Для примера, код драйвера на дельфи.
Код:
unit tiny;
interface
TYPE
UShort = Word; // unsigned 16-bit
Short = Smallint; // signed 16-bit
ULong = Cardinal;
Size_T = Cardinal;
PVoid = Pointer;
NTStatus = ULong;
CShort = Short;
TYPE
PUNICODE_STRING = ^UNICODE_STRING;
UNICODE_STRING = packed record
Length : UShort;
MaximumLength : UShort;
Buffer : PWideChar;
end;
CONST
NTOSKrnl = 'ntoskrnl.exe';
CONST
IRP_MJ_MAXIMUM_FUNCTION = $1B;
TYPE
PDRIVER_OBJECT = ^DRIVER_OBJECT;
DRIVER_OBJECT = packed record
csType : CShort;
csSize : CShort;
DeviceObject : Pointer; // SHOULD BE PDEVICE_OBJECT
Flags : ULong;
DriverStart : Pointer;
DriverSize : ULong;
DriverSection : Pointer;
DriverExtension : Pointer; // SHOULD BE PDRIVER_EXTENSION
DriverName : UNICODE_STRING;
HardwareDatabase : PUNICODE_STRING;
FastIoDispatch : Pointer; // SHOULD BE PFAST_IO_DISPATCH
DriverInit : Pointer; // PDRIVER_INITIALIZE
DriverStartIo : Pointer; // PDRIVER_STARTIO
DriverUnload : Pointer; // PDRIVER_UNLOAD
MajorFunction : array [0..IRP_MJ_MAXIMUM_FUNCTION] of Pointer;
end;
CONST STATUS_SUCCESS = NTStatus( $00000000 );
function DriverEntry(
const DriverObject : PDRIVER_OBJECT;
const RegistryPath : PUNICODE_STRING
) : NTStatus; stdcall;
implementation
function DbgPrint(
const Format : PAnsiChar
) : NTStatus; cdecl; external NTOSKrnl name '_DbgPrint';
procedure ADriverUnload(
const DriverObject : PDRIVER_OBJECT
); stdcall;
begin
DbgPrint('Tiny: DriverUnload()');
end;
function DriverEntry;
begin
DriverObject^.DriverUnload := @ADriverUnload;
DbgPrint('Tiny: DriverEntry()');
Result := STATUS_SUCCESS;
end;
end.
Аналогичный на PureBasic.
Код:
Declare DriverEntry(*DriverObject, *RegistryPath)
*A=@DriverEntry()
!jmp [p_A]
IncludePath #PB_Compiler_Home+"DDK\"
XIncludeFile "ntddk.pbi"
XIncludeFile "ntstatus.pbi"
XIncludeFile "ntfunct.pbi"
Procedure DriverUnload(*DriverObject.DRIVER_OBJECT)
DbgPrint(@"PureBasic: DriverUnload()")
EndProcedure
Procedure DriverEntry(*DriverObject.DRIVER_OBJECT, *RegistryPath.UNICODE_STRING)
DbgPrint(@"PureBasic: DriverEntry()")
*DriverObject\DriverUnload = @DriverUnload()
ProcedureReturn #STATUS_SUCCESS
EndProcedure
Попробуйте скомпилировать драйвер в дельфи.
А в PureBasic без заморочек компилируется из
IDE. Просто вставьте код драйвера в редактор IDE и скомпилируйте. Нужно всего лишь в меню "Компилятор" щёлкнуть по пункту "Создать драйвер" и если в коде нет ошибок, то драйвер будет создан в указанной папке.