activex匯入後在記憶體錯誤

來源:互聯網
上載者:User
這個問題不光是在5中有  我用delphi7的時候也出現了同樣的問題,這次一定要做個記錄,浪費了一天的時間找到的

首先,我們來看看VB寫的ActiveX控制項在Delphi
5下面的奇怪表現。例如:我們用VB編寫了一個控制項UserTest(為簡單起見,我們只匯出一個類即使用者控制項),一個屬性TestName,一個方法TestMethod。然後將其編譯成一個ActiveX控制項,註冊並匯入Delphi5的開發環境(以上步驟如有未清楚之處,請查閱各類參考資料,肯定有標準答案),到目前為止,看來一切正常。然後,我們習慣的把控制項拖放到表單上,調整大小,在屬性視窗中為屬性賦值,或者在代碼中也是一樣,非常正常,好用的很。但是,下面問題來了,如果您興緻勃勃的去調用了那個TestMethod,那麼您將得到一個古怪的異常 “Ole
Error 800a01a9”,然後程式退出,而且非常不幸的是,您將無法跟蹤到這個異常,在Delphi中或是VB中都是,當然如果您對彙編很在行的話,您可以跟著Delphi的調試視窗一步一步往下……當我第一次碰到這個問題的時候,我幾乎是憤怒的,因為無論是MicroSoft或是Borland,對該錯誤都沒有任何解釋,也沒有任何可以尋找的資料。我只好跑到常去的幾個論壇,當然最主要的還是CSDN,在VB版和Delphi版中四處搜尋類似的問題,然後非常遺憾的是,只有類似的問題,而沒有答案,一個大客戶就用的這個開發工具,我在測試了幾乎所有Windows上的開發工具和開發環境(包括案頭和WEB)後,惟獨將Delphi忘記了。剩下的兩天裡,我幾乎是滿世界亂跑,給所有的朋友打電話,詢問Delphi方面的高手是否知道這個情況,最後,我從Google上搜到了一個連結,可惜的是現在我忘記了那個連結的具體位置,但是我得到了一個近乎Magic的方法(發現者是這麼稱呼它的): 一個手工修改Delphi匯入VB ActiveX控制項後產生的代理類型庫XXX_TLB.PAS(這裡XXX指的是控制項的類名)檔案的方法可以解決這一問題。舉例說明:       有一個VB 寫的控制項 UserControl1 ,在Delphi中匯入後產生兩個檔案,其中一個UserControl1_TLB.PAS 就是我們所要修改的檔案。    在檔案中尋找類似   FintF: _UserControl1;Function GetControlInterface:_UserControl1; 和 property ControlInterface: _UserControl1 read GetControlInterface; GetControlInterface; 以及 procedure TUserControl1.CreateControl;    procedure     DoCreate;    begin       Finf:=IUnknown(OleObject) as _UserControl1;    End;Begin    If Finf=nil then DoCreate;End; Function TUserControl1.GetControl1Interface: _UserControl1; Begin    CreateControl;    Result:=Finfl;End; 請注意:這裡紅色標出的_UserControl1要全部換成_
UserControl1Disp,如果編譯不成功的話,請將編譯警告中報出的_UserControl1 全部換成 _UserControl1Disp,編譯即可,這樣在調用控制項的方法時便不會出現上述的致命錯誤。 感謝這個偉大的發現,我只能這麼形容它,否則可能到現在我還要在這個圈子裡套不出來,或者就是使用另外的工具重新開發這個控制項(我難以想象這個工作量會有多大,又或者它可能還會存在其他的相容性問題)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.