2016-12-30 52 views
0

我們在我們的應用程序中使用鉻瀏覽器組件https://github.com/hgourvest/dcef3。我們最近更新了這個版本,今天發現它在Windows 2008和更舊版本的機器上運行時會導致訪問衝突。在運行時加載單個程序包

只要您啓動應用程序,就會發生此AV。該組件使用的部分只是應用程序的一小部分。

我希望解決的辦法是在運行時加載該軟件包而不是設計時間,但動態鏈接運行時軟件包的選項似乎是全有或全無的決定。我們希望將所有其他包在內部保存在exe中。

這將是一個解決方案?有沒有告訴Delphi它應該只在需要時才加載該包的方法?這樣在Windows 2008服務器上運行的用戶可以繼續使用應用程序的其他部分。

+0

我看不出有理由相信運行時加載將解決您的問題。爲什麼你不試圖在解決問題之前找出問題。 –

+0

@DavidHeffernan好,因爲Chrome本身並不想在這些機器上更新,我不覺得這個組件給AV帶來的太奇怪。以前版本的組件運行良好,但使用了舊版Chrome引擎,該引擎不再爲我們的目的完全支持Web。 – rept

+0

但我不明白爲什麼加載時間加載包是一種避免這種AV的方法。你有證據嗎? –

回答

0

您可以像動態鏈接庫一樣動態加載包。你不能使用RTTI,但你可以從Package中加載和執行程序。

你可以用代碼加載一個包這樣的:

H := LoadPackage('RESTAS.BPL'); 

和訪問方法有這樣的代碼:

@resta := GetProcAddress(H, 'Resta'); 

類似於DLL。 Here you have a complete explanation與delphi中的包加載(BPL's)和庫(DLL's)有不同的配置(有和沒有運行時包)有關。它採用西班牙文,但您可以使用自動翻譯,查看代碼並下載樣本。

+0

謝謝,西班牙項目很有幫助:) – rept

相關問題