2014-06-06 118 views
6

在VBP文件中,有 「參考」 和遵循 「對象」:瞭解VB6項目文件(.VBP)

Reference=*\G{D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E}#2.0#0#..\..\..\WINDOWS\system32\msxml.dll#Microsoft XML, version 2.0 
Object={EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}#1.1#0; ieframe.dll 
  1. 什麼是這兩者之間的區別是什麼?
  2. 爲什麼有些dll通過引用而不是Object引用,反之亦然?
  3. VB在哪裏獲取對象引用的文件路徑?在VBP中沒有爲它們指定路徑,當我搜索我的註冊表時,GUID也不會出現!但是,當我加載項目時,VB會嘗試查找dll/ocx/etc。在一些絕對路徑上(例如C:\path\to\dll\ieframe.dll)。如果它不在註冊表或VBP中,它在哪裏得到這個路徑?

回答

5

Object s適用於通常編譯爲.ocx文件的ActiveX控件。 Reference用於通常編譯爲.dll文件或.tlb文件的類型庫。注意.ocx文件也包含typelib,所以這是非常不一致的,幾乎是一個遺留分支。

路徑和文件名是可選的,typelib ID是解決依賴性的標準方法。只有在註冊表中找不到這些文件時,纔會有一個自動解析策略,僅在.ocxes文件夾中搜索當前文件夾中的文件。當應用程序開始在當前文件夾中自動註冊.ocxes時,如果沒有找到typelibs,並且由於缺乏在HKLM中寫入的權限,現代操作系統常常會失敗,這種最煩人的行爲也會在運行時發生。

.frm/.ctl源文件中也有Object行。如果添加現有的form/usercontrol,這些會附加到當前項目。

如果添加.ocx typelib作爲Reference行,則IDE通常無法加載項目並需要手動編輯。