Здравствуйте, KoanMu, Вы писали:
KM>Язык С:
KM>В DLL объявлена функция:
KM>__declspec( dllexport ) long MidiReadBytes(MIDIFILE * mf, unsigned char * buf, unsigned long count);
KM>Язык DELPHI:
KM>Type
KM>PByte = ^Byte;
KM>pMIDIFILE = ^MIDIFILE;
обрати внимание
KM>MIDIFILE = packed record
KM>{
KM>.... структура аналогичная структуре в С
KM>}
KM> end;
KM>TMidiReadBytes = function (mf:pMIDIFILE; buf:PByte; count:Longword):Longint;cdecl;
KM>function MyFunc(mf:pMIDIFILE);
KM>var
KM>i:Word;
KM>chr: Array [0..59] of Byte;
KM>MidiReadBytes:TMidiReadBytes;
KM>begin
KM>{
KM>здесь получаем DllHandle
KM>}
KM>@MidiReadBytes := GetProcAddress(DllHandle,PChar('MidiReadBytes'));
KM>i:=0;
KM>result := MidiReadBytes(mf, @chr[i], 1);
KM>{
KM>!!!! после вызова функции MidiReadBytes изменилась "i"
KM>}
KM>end;
а с чего ты взял что переменная изменилась? под отладчиком смотришь? так она у тебя больше не используется и оптимизатор ее уже выкинул давно, если просто сразу не подставил @chr[0].
KM>Что я сделал не так?
KM>Думал, что это произошло из-за неправильного объявления вызываемой функции, но тогда бы при ее вызове происходила ошибка.
KM>Но она не происходит.
то что все не посыпалось еще не означает что все правильно

... << RSDN@Home 1.1.4 beta 6a rev. 436>>