Всем привет.
Сел за делфи вчера. С длл вообще работал как-то раз и просто, чтоб "позырить" как оно.
Возникла задача написать дллку для одной софтины по небольшому описалову для нее.
Сделал, откомпилил. Написал прогу, чтоб проверить работоспособность и что-то не так.
Функция в длл принимает два параметра: значение типа DWORD и указатель на структуру, которую функция и должна заполнить. При первом присваивании переменной структуры вылетает "access violation" и собственно вопрос: в чем может быть причина? Структуре выделяю память перед использованием.
Функция в ДЛЛ:
function GetCardInfo( Card: DWORD; Info: PCardInfo ): Integer; stdcall; export;
var
S: String[200];
begin
if Card >= 1 then begin
Result := 0;
with Info^ do begin
Deleted := 0; // тут вылетает и вообще на любом присваивании
Discount := 10;
Bonus := 5;
Summa := 2000000;
Holder := 'Иванов Иван Иванович';
Locked := 0;
S := 'Доп информация для карты N ' + IntToStr( Card );
Move( S[ 1 ], DopInfo, Length( S ));
Sums[ 2 ] := Card * 10;
Sums[ 3 ] := Card * 10;
Sums[ 4 ] := Card * 10;
Sums[ 5 ] := Card * 10;
end;
end else begin
Result := 1;
end;
end;
Структура:
PCardInfo = ^TCardInfo;
TCardInfo = packed record
Size : Word;
Deleted : Byte;
Seize : Byte;
StopDate : Byte;
Holy : Byte;
Manager : Byte;
Discount : Word;
Summa : Comp;
Holder : Array[0..39] of Char;
Bonus : Word;
Locked : Byte;
WhyLock : Array[0..39] of Char;
DiscLimit : Comp;
Unpay : DWORD;
DopInfo : Array[0..199] of Char;
Sums : Array[2..5] of Comp;
end;
Объявление функции в проге:
function GetCardInfo( Card: DWORD; Info: PCardInfo ): Integer; external 'FarCards.dll';