Цитата:
Вопрос по поводу "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;
З.Ы. задача по выводу ответа железки решена?