在delphi中呼叫dll函式了,有一個模塊單獨呈現的時候可以,但是放在那個大程式下運行的時候總是會提示錯誤:access violation at Ox0003……的,而且是地址溢位的原因,主界面代碼如下:
var
lp,rw,alphTa:double;
Swb:double;
begin
lp:=strtofloatDef(edtLp.text,0);
rw:=strtofloatDef(edtrw.text,0);
alphTa:=strtofloatDef(edtxwj.text,0);
Swb_Calculate(lp,rw,alphTa,Swb);
edtjt.text:=FloatTostr(Swb);
end;
其中,Swb_Calculate這個dll函式的代碼如下:
var
rwD,C1,C2:Double;
begin
try
Result:=0;
if (alphTa=0) or (alphTa=360) then
begin
C1:=0.16;
C2:=2.675;
end
else if alphTa=180 then
begin
C1:=0.026;
C2:=4.532;
end
else if alphTa=120 then
begin
C1:=6.6*Power(10,-3);
C2:=5.32;
end
else if alphTa=90 then
begin
C1:=1.9*Power(10,-3);
C2:=6.155;
end
else if alphTa=60 then
begin
C1:=3.0*Power(10,-4);
C2:=7.509;
end
else if alphTa=45 then
begin
C1:=4.6*Power(10,-5);
C2:=8.791;
end;
Swb:=0;
rwD:=rw*(lp+rw);
Swb:=C1*exp(C2*rwD);
Result:=1;
except
end;
因為之前把這個模塊單獨列出來驗證過,這個代碼的語法沒什么問題,但是在那個大程式里面總是找不出問題來,不管是運行還是除錯,只要是計算,那個警告符就出來了,哎無語呀,對delphi不太熟悉,請各位大神幫幫忙啦……
uj5u.com熱心網友回復:
F8, 一行一行去跟蹤不就知道是哪行出錯了嗎?uj5u.com熱心網友回復:
另外做成DLL呼叫時候,要注意定義和宣告一致,比如是STDCALL、還是C呼叫方式,
在DLL里和呼叫宣告處,需要一致,
估計你的問題可能出在這里。
uj5u.com熱心網友回復:
出現這個例外 一般是使用了未分配記憶體的指標uj5u.com熱心網友回復:
工程里添加ShareMemuj5u.com熱心網友回復:
多半是生命周期引起的,多半重用了變數或者物件uj5u.com熱心網友回復:
可能是函式地址指向不正確或者是dll函式宣告有問題,沒帶stdcall之類的uj5u.com熱心網友回復:
同意樓上
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103123.html
標籤:非技術區
上一篇:ADO連接SQL2005老是掉線
