用C#建立ActiveX問題

來源:互聯網
上載者:User
        這裡只對我遇到的問題進行說明及解答,其它請參見MSDN的COM互動:

一、              最好使用自訂的介面。否則很容易匯出一些不必要的東西,在編譯時間還會有一大堆的警告(當從.Net自身的類繼承時會出現這種情況,其它情況我沒有試。)。

二、              介面中的方法或屬性要有DispID屬性(否則可能會報“找不到成員”錯誤,當介面中含有成員時,如果不使用DispID,則該成員有可能不會匯出!)。

三、              介面不能將繼承的的介面進行公布。如果要公布的介面繼承自另一介面,不知為什麼其父介面中的內容不會被匯出。如果有知道的朋友不妨告知一下。

四、              我曾經想將.Net中的強型別化資料集作為參數或傳回值,實驗是行不通的。因為只面涉及到了只有.Net才能用的東西如ComponentModel等。

五、              可視化控制項整體不顯示的問題的解決方案:請指定分別含有下面兩個屬性的兩個方法。

    [ComRegisterFunction()]

[ComUnregisterFunction()]

    並在註冊表中建立或刪除“Control”鍵及設定或刪除“Codebase”項的值。如下:

[ComRegisterFunction()]
public static void RegisterClass(string key)
{
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
RegistryKey ctrl = k.CreateSubKey("Control");
ctrl.Close();
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
inprocServer32.Close();
k.Close();
}

[ComUnregisterFunction()]
public static void UnregisterClass(string key)
{
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
k.DeleteSubKey("Control", false);
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
k.DeleteSubKey("CodeBase", false);
k.Close();
}

六、              可視化控制項內某些子控制項無法顯示的問題的解決方案有三種

為控制項設定非預設背景色。

在介面中指定背景色屬性(請將alpha值設定為255)。

將表單設定為支援透明(但在放在Delphi上面時並不透明,只是能夠顯示完整而已。)

            SetStyle(ControlStyles.SupportsTransparentBackColor, true);

            this.BackColor = Color.Transparent;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.