Показать сообщение отдельно
  #9  
Старый 16.10.2012, 20:01
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Цитата:
Вопрос по поводу "access violation at address" все еще открыт.
могу только пофантазировать...
судя по этому
Цитата:
Код:
type
  PProtocolInfo = ^ TProtocolInfo;
  TProtocolInfo = record
  DisableAddress: BOOLEAN; // Размер структуры, байт
  CheckMode: INTEGER; // Режим проверки контрольной суммы
  end;
и по тому, что хейдеры даны в С, типу bool в С соответсвует тип BOOL в Delphi и SizeOf(BOOL)>SizeOf(boolean) применяемому у вас, поэтому в dll происходила попытка чтения из невыдленной памяти при обращении к переменной типа TProtocolInfo (с учетом, что остальные типы членов структуры по крайней мере требуемого размера), как то так

Цитата:
И еще!
Если в запросе поставить
Код:1
Код:
Ret := W_IO(#$1, #$00, 0, '', @ReplyLen, ReplyBuffer);
А не
Код:1
Код:
Ret := W_IO(#$1, #$00, 0, '', ReplyLen, ReplyBuffer);
То компилятор ругается
[Error] Unit1.pas(120): Types of actual and formal var parameters must be identical
конечно он будет ругаться, ведь у вас функция определена как
Код:
  W_IO: function(Address, Cmd: char;
                 BodyLen: integer;
                 const CmdBody;
                 var ReplyLen: integer;
                 var ReplyBuffer): char; stdcall;
а вы пытаетесь закинуть ей параметры согласно моего определения, компилятор и выражает вам свое фи, дословно "типы актуальных и формальных параметров должны быть идентичны"
по поводу констант
Цитата:
Методы расчета контрольной суммы кадра
CHECK_NONE - 0х00 //Не проверять контрольную сумму кадра
CHECK_SUM - 0х01 //Использовать суммирование (1 байт)
CHECK_CRC16 - 0х02 //Использовать CRC16 (2 байта)
CHECK_FCS - 0х03 //Использовать FCS (2 байта)
это как раз константы одного члена структуры (записи) TProtocolInfo, а именно CheckMode: INTEGER;

З.Ы. задача по выводу ответа железки решена?
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием