Показать сообщение отдельно
  #7  
Старый 09.04.2014, 21:48
fred_pb fred_pb вне форума
Прохожий
 
Регистрация: 08.04.2014
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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 и скомпилируйте. Нужно всего лишь в меню "Компилятор" щёлкнуть по пункту "Создать драйвер" и если в коде нет ошибок, то драйвер будет создан в указанной папке.
Ответить с цитированием