2011-12-08 56 views
0

我有一個應用程序,工作正常... 移植它作爲DLL實現。 我有一個datamodule,它上面有我的數據庫和TTable組件... 在設計模式下,數據庫設置爲活動。 表指向數據庫,它們被設置爲活動狀態。 我可以用鼠標右鍵點擊表格,請在字段編輯器,並查看所有列,所以我知道的結構/屬性都設置了罰款....德爾福 - 在DLL中的DataModule中使用TTable的錯誤

的問題是在運行時... 它讓我在這條線的AV ...

if MyDataModule.DB1.Connected = True then 
    ShowMessage('Active') 
    else 
ShowMessage('Not Active'); 

我見過的提示在網絡上有一些特別的東西需要做使用DataModule的一個DLL裏面,但我沒有得到任何工作。

具體的錯誤消息:在模塊地址06D4E22E

訪問衝突 'DocAssistCom.dll' 讀地址0000070'

+3

您確定在創建數據模塊之前使用它嗎? – RRUZ

+1

@RRUZ指出,應警告數據模塊(當添加到VCL表單應用程序時)會自動創建(如果您查看項目源),而創建dll時,需要在創建數據模塊的實例之前手動創建任何對其上的組件的調用都可以進行,即訪問數據庫 – ComputerSaysNo

+1

請注意以備參考:只要你的手指輸入短語「AV」,「訪問衝突」,「錯誤」或「異常」,他們應該接下來的事情開始輸入是您收到的** exact **錯誤消息,包括任何內存地址或錯誤代碼。說「它給我一個AV」對於試圖幫助你解決你的問題的人來說絕對沒用;錯誤信息可以極大地加快速度(即使對你來說毫無意義),爲你提供更快的解決方案。謝謝。 :) –

回答

4

您應該確認MyDaModule確實創造,那麼MyDataModule.DB1甚至在嘗試使用MyDataModule.DB1.Connected之前也被創建。

if Assigned(MyDataModule) then 
    if Assigned(MyDataModule.DB1) then 
    if MyDataModule.DB1.Connected = True then 
     ShowMessage('Active') 
    else 
     ShowMessage('Not Active') 
    else 
    ShowMessage('MyDataModule.DB1 not assigned') 
else 
    ShowMessage('MyDataModule not assigned'); 

但是,當您嘗試使用它們時,它們可能仍未完全創建並準備就緒。

所以,與其周圍蔓延ShowMessage電話,我寧願用OutputDebugstring調試DLL在IDE看到的代碼路徑...

注: 我不知道是哪個版本的Delphi和Windows正在使用,但請注意,TTable需要BDE(現在已經被棄用)...

+0

DataModule尚未分配....但我正在從DataModule.OnCreate事件中收到消息。我已經將DM變量設置爲全局變量,但這個.pas文件不能「看見」它,但它編譯得很好。至於OutputDebugString,從來沒有聽說過...很高興知道... – user1009073

+0

解決:我不得不手動創建數據模塊,然後我也必須從USES子句中刪除MyDataModule.pas文件;某些類型的範圍問題也在爬行...... – user1009073

+0

您是否重複使用了單元中相同的全局MyDataModule變量名稱? –