それをHSPで呼び出すとおかしくなるのです
この件別のところで質問してもよいのですが、
HSPでの呼び出し時の問題なのでここで質問させていただきます。
まず
Delphiのプロジェクトに入力した内容を書きます
-------------Himath.dpr-----------------------
library HiMath;
uses
SysUtils,
Classes;
{$R *.res}
function factorial (n:Integer):integer;stdcall;
//nは整数、nが-1以下の場合-1が返る
var
buf,buf1,buf2 :integer;
begin
if n=0 then factorial:=1 else
begin
if n<0 then factorial:=-1 else
begin
buf:=n;
buf2:=1;
repeat
buf1:=buf-1;
if buf1=0 then buf1:=1;
buf2:=buf2*buf*buf1;
buf:=buf-2 ;
factorial:=buf2;
//txt:=floattotext(buf2);
until buf<=0;
end;
end;
end;
exports
factorial;
begin
end.
-----------------------------------------------
この命令 階乗を計算するものです
そこでhsp上で
と呼び出して
#uselib "HiMath.dll" #cfunc factorial "factorial" int
print factorial(13)
としたら間違った値が出るのです どうにかなりませんか? ------------------------------------------------------------------------------ そこで同機能のものをHSPでモジュール化してみたら以下になります
#module #defcfunc factorial int n //階乗 if n==0{ nb=1 }else:if n<0{ nb=-1 }else{ buf=n buf2=1.0 do buf1=buf-1 if buf1=0:buf1=1 buf2=buf2*buf*buf1 buf=buf-2 nb=buf2 until(buf<=0) } return nb #globalで
としたら正しい答えが出ます
print factorial(13)
とにかくDLLから呼び出したとき正しい答えにしたいのです