Перекодирование 4 байтного числа с плавающей точкой (в СЕ тип Float; в Delphi тип Single), полученного функцией READMEM, в целое число.
Поскольку CALL("Plugin.DLL", ...) передает в DLL и принимает числа в диапазоне от
-2 147 483 648 до 2 147 483 647, а READMEM считывает беззнаковое число в диапазоне от
0 до 4294967295, то READMEM должен считывать это число не 1 раз по 4, а 2 раза по 2 байта с шагом в 2 байта.
CALL("float_int".dll, x0, x1)
x0 - старшие байты
x1 - младшие байты
CALL("float_int.dll", 0xC67b, 0xd000)
print($_return1)
halt
Код float_int.dll на DELPHI
library float_int;
uses
SysUtils;
//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
pIntArr = array[0..0] of Integer;
var
tmp, tmp0, tmp1: Integer;
sum: Int64;
float: Single;
begin
// _mas - указатель на начало массива параметров integer
// _size - размер массива (число параметров)
tmp0:= pIntArr(_mas^)[0];
tmp1:= pIntArr(_mas^)[_size-1];
sum:= tmp0*65536 + tmp1;
Move(sum, float, 4);
tmp:= Round(float);
result:= tmp // присваиваем возвращаемое значение
end;
//------------------------------------------------------------------------------
// список экспорта
exports execute;
begin
// тело пусто
end.