在VB6中,UserControl可以編譯爲OCX,然後作爲引用組件包含在另一個項目中。或者,UserControl源本身(即CTL文件)可以直接包含在EXE或DLL項目中。VB6 UserControls:項目中OCX與包含之間的差異
這兩種方法之間有一個好奇的區別。當從OCX中使用時,Extender properties(more)的列表將無縫地與爲控件定義的任何自定義屬性合併。但是從CTL使用時,這似乎並不是這種情況。試圖在控件上使用Extender屬性會產生編譯器錯誤。
一個示例是.Tag
屬性。當作爲OCX引用時,此屬性在Intellisense中可用並編譯成功。但是當使用CTL時,這個屬性的完全相同的用法會產生編譯時錯誤。
其他例子是.Left
,.Top
,等我預料VB6治療Extender屬性一樣的,不管控制是如何包括在內。
爲什麼這種差異存在,是否有任何修復? (注意:作爲解決方法,當需要訪問Extender屬性時,我一直指代代碼中的控件類型爲Object
,但理想情況下,我更願意使用實際類型來實現清晰性和編譯時安全性。)
OCX是一個有趣的名字的DLL文件。您使用COM來訪問它。 VB6有它自己的內部COM用於內部的東西,有點快。也許這是不同之處。 – 2016-07-31 07:08:56
@Noodles如果是這樣,它似乎是一個異常的區別。我知道的每一個其他案例,將代碼捆綁到EXE與編譯到單獨的DLL/OCX中沒有區別。 – DaveInCaz
這是他們訪問的框架的區別。這只是一個假設。但它是CTL和DLL之間的區別 – 2016-08-01 00:57:26