Всем привет!
Есть вот такой FS-скрипт (Все примеры взяты из примера)
Ксть вот такая ф-я написаная на delphi ( в DLL)
Не получается восстановить входную строку 'Это строка буфера, 123123123123юбыабыва23бьбь3б3б3б1б1б1б1б133433убвавыа'
В pc[i0] полній бред
Есть вот такой FS-скрипт (Все примеры взяты из примера)
Код:
var
i,i1,i2 : integer; // целые числа.
s : string; // строковая переменная/буфер.
r : single; // short-float, не целое число.
hlib : handle; // хендл dll
res : integer; // результат ф-ций.
begin
ScriptTimeOut(99999); // выключим таймер в скрипт-тестере.
hlib := gDLL.LoadLib('dll\l2_bsfg.dll'); // DLL системная, можно путь не указывать
if _isScriptTester then
// FuncTst4:
//
// вызовем ф-цию FuncTst4 из DLL
// ф-ция c 3 параметрами указатель на строку/блок памяти, и 2 integer'а.
// последний параметр - переменная.
// (описание ф-ций в DLL должны четко совпадать !)
//
writelogln('');
writelogln(' FuncTst4:');
i2 := 0;
s := 'Это строка буфера, 123123123123юбыабыва23бьбь3б3б3б1б1б1б1б133433убвавыа';
//
writelogln(' заданные параметры: ');
writelogln('буфер, размер '+inttostr(length(s))+'байт');
writeloghexb(s);
//
res := gDLL.CallFuncF5(hlib,'FuncTst4','sdD',s, length(s), i2, null, null);
i1 := GetLastError;
if (res = -1) and (i1 <> 0) then begin
writelogln(' Функция не найдена?, ошибка: '+SysErrorMessage(i1));
end else begin
writelogln(' данные после вызова ф-ции: ');
writeloghexb(s);
writelogln(format('%s %d',[' ф-ция вернула значение: ',res]));
writelogln(format('%s $%x',['третий параметр: ',i2]));
end;
end.
Ксть вот такая ф-я написаная на delphi ( в DLL)
Код:
function FuncTst4(pc : pchar; le : integer; var i : integer) : integer; stdcall;
var i0 : integer;
begin
// обычно так передаются блоки памяти, второй параметр (константа) - его максимальный размер.
// возвращают (например, в третьем параметре) используемый размер буфера.
// пакеты можно обрабатывать по этому же принципу. =)
//
// заменим все символы от '0' до '9' (все цифры) в блоке на '*'
// вернем количество изменений.
// в последнем параметре вернем номер последнего исправленного символа.
//
// 'pc' - это указатель на первый символ блока, 'le' - размер.
// ! Заметьте, индексация в скрипте начинается с единицы, здесь - с нуля ! в скрипте это банальная строка.
// (хотя можно сделать и через виртуальный массив с единицы, кто как хочет тот так ... и делает)
//
result := 0;
for i0 := 0 to le-1 do begin
if pc[i0] in ['0'..'9'] then begin
pc[i0] := '*';
Inc(Result);
i := i0;
end;
end;
end;
exports FuncTst4;
Не получается восстановить входную строку 'Это строка буфера, 123123123123юбыабыва23бьбь3б3б3б1б1б1б1б133433убвавыа'
В pc[i0] полній бред