我有興趣將一套軟件從ODAC v5升級到v8.2.8。DBAccess.pas中的聲明失敗
一個應用程序特別是造成問題。此應用程序加載作爲dll實現的一組輔助應用程序之一。
LibHandle := LoadLibrary(PChar(dllname));
if LibHandle <> 0 then
begin
@showForm := GetProcAddress(LibHandle,'ShowMainDllForm');
if (@showForm <> nil) then
begin
try
ShowForm(Application.Handle, @FGlobalVars, 1);
的發射是好的 - 它有它自己的數據庫連接,我可以通過各種ODAC單位相當愉快步驟。
但是,dll立即嘗試打開遊標時除外。錯誤是單元DBAccess.pas
中的斷言失敗,從MemDs.pas
調用。我已經完成了這一步,並表明斷言失敗是正確的; Assert(FieldDesc is TCRFieldDesc)
正在從MemDS.CreateFieldDefs()
收到TFieldDesc
。
我很難過。一個調用方法可以正常工作(啓動器應用程序)和另一個(dll)總是失敗?
如果有人經歷了這方面我希望任何信息的困難,但是脆弱的它聽起來
您提供的代碼演示庫和調用加載的方法,而不是執行導致錯誤的代碼。請提供用於創建庫中使用的數據庫對象的主應用程序,庫和腳本的完整代碼 - 我們將嘗試重現並修復該問題。 – Devart 2013-03-19 15:07:33
這聽起來比它更容易,主要是因爲有一大堆我必須複製的組件依賴關係。你對我的另一個問題的回答是提供信息......我會盡快回復你。 – 2013-03-19 16:48:34
@devart - 我已經證明,取消斷言線路可以解決問題。我懷疑'AssignConnect'方法中的typeinfo正在丟失。你能評論嗎?弄亂你的代碼對我們來說並不理想,有什麼你能想到的,已經從你認爲可能相關的版本5改變了嗎? – 2013-03-20 15:53:28