DLL為什麼使用完畢後會提示 記憶體訪問錯誤呢?

2021-09-08 15:27:39 字數 1334 閱讀 6714

自己寫了個dll,用delphi呼叫我自己delphi寫的dll,執行結果可以出來,但執行完畢後會提示記憶體訪問錯誤。我第二次呼叫的時候就直接提示記憶體訪問錯誤,無法執行。在程式中我使用了record集合作為返回記錄  

uses  

sharemem,  

。。。。。。  

var    

。。。。。。  

type  

tps   =   record  

sno:   integer;  

sname:string;  

skt:string;  

end;  

tp=array   of   tps;  

我的函式是  

function   sel(s:integer,var   presult:tp):integer;   export;   stdcall;  

begin  

s:=0;  

......  

if   (滿足條件)   then  

begin  

s:=s+1;  

setlength(presult,s);  

presult[s-1].sno:=某資料;  

presult[s-1].sname:=某資料;  

presult[s-1].stk:=某資料;  

end;  

end;  

請兄弟們幫忙看看**有問題啊!  

把string型別換成shortstring

可能是其他**的原因,用注釋的方法或條件編繹逐塊排除

我試了一下,就是換成pchar也還是不行的了,應該就是這段**出的問題,因為沒加這段**前都是好好的,加了就有問題,我執行完畢後執行結果是有的,但會報記憶體錯誤。我第二次執行的時候居然連執行都不能執行就直接出錯了。

1.沒有string返回值,就不要用sharemem(sharemem有時會有問題,我也碰到過)  

2.改string為string[250]   //如果資料長度不超過250的話  

或改為char[1000];  

不要改為pchar,因為它要申請記憶體  

用low   high函式來訪問記錄陣列

我一般在訪問dll時都用pchar操作,只是多寫幾個引數罷了,可以避免很多問題的。

tp=array   of   tps;  

ptp   =   ^tp;  

function   sel(s:integer,var   presult:ptp):integer;   export;   stdcall;  

tp改用指標

EditText文字輸入框使用完畢自動掩藏輸入法

很多時候edittext文字輸入框在輸入資訊完成操作之後後,我們希望能夠自動收縮掩藏起虛擬鍵盤,以方便處理其他業務邏輯。比喻本文中edittext文字在輸入商品編號完成商品檢索之後,需要自動掩藏虛擬鍵盤,不要遮擋其他頁面操作資訊,當下次再檢索商品資訊時,再自動彈出虛擬鍵盤完成輸入。看上圖效果,晚上輸...

序數是什麼意思 為什麼氦氣吸入後會變聲?

大家一定知道有一種能讓人聲音變細的氣球吧 那有知道氣球裡充裝的是什麼氣體嗎?為什麼人體吸入後會變聲呢?首先,氣球裡充裝的是什麼氣體呢?答案是 氦氣 那氦氣是一種什麼樣的氣體呢?氦氣 化學符號he,原子序數是2,一種無色的惰性氣體,放電時發深黃色的光。在常溫下,氦是一種極輕的無色 無臭 無味的單原子氣...

為什麼要對DLL進行簽名

曾經在乙個專案中,要求您為dll建立乙個強名稱,並且為乙個專案建立乙個強名稱,然後編譯專案解決方案開始出現奇怪的編譯錯誤。我去過很多次。面對這些問題時,我有些疑問浮出水面。讓我們仔細閱讀以下基礎知識。我們將調查以下內容 組裝 加密 雜湊 數字簽名assembly assembly是用於部署,安全性和...