2015-05-09 66 views
0

在客戶端的我的datasnap應用程序中,我明顯有一個clientmodule。我得到閉上了應用程序的錯誤:客戶端的clientmoduleunit.pas上的訪問衝突

ERROR 根據調試器中打開了該功能:

destructor TClientModule1.Destroy; 
begin 
    FServerMethods1Client.Free; 
    inherited; 
end; 

compiller顯示此:

在$ 0059ABC4第一次機會異常。消息'0x0059abc4處的訪問衝突:地址0x00000034的讀取'的異常類$ C0000005。進程Cajero.exe(1856)

+0

在此析構函數執行之前,最有可能'FServerMethods1Client'被釋放。更多的代碼會有幫助。 FServerMethods1Client創建在哪裏?你在其他地方叫「免費」嗎?此外,如果您有錯誤消息,請複製郵件的*文本*並編輯您的問題以包含它。異地託管的錯誤圖片無用。 –

+0

但沒有其他與此相關的指令或可以釋放的指令FserverMethodsClient – user3780282

+0

您是否知道訪問衝突是什麼?如果不是,那麼你應該學習。有了這些知識,您就可以識別故障。另外,當您提出有關錯誤的問題時,應該逐字包含錯誤消息。這裏不可見。 –

回答

0

根據你的屏幕截圖,你可以在一個低地址$ 34得到一個AV,這表明你正在調用一個對象引用的方法爲nil。

試試這個僞代碼

procedure TForm22.FormCreate(Sender: TObject); 
begin 
    TForm(nil).Next; 
end; 

而且看看在AV的ADRESS。

當您嘗試調用對象上的方法時,編譯器在名爲VMT的表中查找以找到方法的偏移量。該值被添加到對象引用的地址中。

在你的代碼有property稱爲ServerMethods1Client它的定義是這樣的:

property ServerMethods1Client: TServerMethods1Client read GetServerMethods1Client write FServerMethods1Client; 

嘗試更改爲只讀屬性

property ServerMethods1Client: TServerMethods1Client read GetServerMethods1Client; 

編譯器會告訴你,你在哪裏assiging對你的財產毫無價值。

+3

VMT只用於虛擬方法 –

+0

是在同一行..在「結束」;的析構函數方法。我寫的事件OnCreate datamodule,我想它有一些尊重.. – user3780282

+0

我幫不了你。你沒有迴應給出的建議。 –