Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > com порты и Vista


Автор: AKATAN 28.1.2009, 11:07
Здравствуйте!

Есть простой код, что ищет свободные ком-порты:
Код

unit uCOM;

interface

uses
  Classes;

const
  CDB_REPORT_BITS = 0;
  DB_REPORT_BYTES = 1;

function ComDBOpen(PHComDB: PLongWord): Longint; stdcall;
function ComDBClose(HComDB: LongWord): Longint; stdcall;
function ComDBGetCurrentPortUsage(HCOMDB: LongWord;
  Buffer: Pointer; BufferSize: LongWord; ReportType: LongInt;
  MaxPortsReported: PLongWord): Longint; stdcall;

procedure GetCOMList(List: TStrings);

implementation

uses
  SysUtils, Windows;

const
  msports = 'msports.dll';

function ComDBOpen; external msports name 'ComDBOpen';
function ComDBClose; external msports name 'ComDBClose';
function ComDBGetCurrentPortUsage; external msports name 'ComDBGetCurrentPortUsage';

procedure GetCOMList(List: TStrings);
var
  ComDB: LongWord;
  Buffer: array of Byte;
  BufferSize: LongWord;
  I: Integer;
begin
  if ComDBOpen(@ComDB) <> ERROR_SUCCESS then RaiseLastOSError;
  try
    ComDBGetCurrentPortUsage(ComDB, nil, 0, DB_REPORT_BYTES, @BufferSize);
    SetLength(Buffer, BufferSize);
    ComDBGetCurrentPortUsage(ComDB, Buffer, BufferSize, DB_REPORT_BYTES, @BufferSize);
  finally
    ComDBClose(ComDB);
  end;
  List.Clear;
  for I := 0 to BufferSize - 1 do
    if Buffer[I] = 1 then List.Add('COM' + IntToStr(I + 1));
end;

end.



Запускаю прогу под вистой - выдает ошибку "A call an OS function faild".
Пишу на Дельфи 7, возможности перенести проект на что-то выше - нету возможности. Ось - Windows XP SP2. Ось тестируемой тачки - Windows Vista Home Basic.

Автор: AKATAN 28.1.2009, 13:30
Проблему решил. Все ОЧЕНЬ просто.
Поставив в параметрах запуска совместимость с Windows XP SP2, и выставив запуск из-под админа - все заработало на ура. Кто же знал что все так тупо....  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)