Excel-DNA - 模板化CustomTaskPane异常

时间:2015-01-19 17:09:13

标签: c# templates excel-dna customtaskpane

我在CustomTaskPaneFactory中遇到了Excel-DNA 0.32最奇怪的问题。

当我创建一个包含从模板化任务窗格(CustomTaskPaneFactory)继承的类(MyIntCTP)的任务窗格时,

MyCTP<T>会抛出异常。

以下是一个说明上下文的示例:

<DnaLibrary RuntimeVersion="v4.0" Language="CS">
<Reference Path="System.Windows.Forms.dll" />
<![CDATA[
    using ExcelDna.Integration;
    using ExcelDna.Integration.CustomUI;
    using System.Windows.Forms;

    internal class ThisAddIn : IExcelAddIn
    {
        public void AutoOpen()
        {
            var p = CustomTaskPaneFactory.CreateCustomTaskPane(typeof(MyIntCTP), "o");
            p.Visible = true;
        }
        public void AutoClose()
        { }
    }

    public class MyCTP<T> : UserControl
    { }
    public class MyIntCTP : MyCTP<int>
    { }
]]>
</DnaLibrary>

上述代码不起作用。 Excel-DNA在CreateCustomTaskPane上崩溃,并带有以下System.Runtime.InteropServices.COMException

Unable to create specified ActiveX control
   at ExcelDna.Integration.CustomUI.ICTPFactory.CreateCTP(String CTPAxID, String CTPTitle, Object CTPParentWindow)
   at ExcelDna.Integration.CustomUI.CustomTaskPaneFactory.CreateCustomTaskPane(String controlProgId, String title, Object parent)
   at ExcelDna.Integration.CustomUI.CustomTaskPaneFactory.CreateCustomTaskPane(Type userControlType, String title, Object parent)
   at ExcelDna.Integration.CustomUI.CustomTaskPaneFactory.CreateCustomTaskPane(Type userControlType, String title)
   [...]

但是,如果父任务窗格(MyCTP)实现了接口,它确实有效(请注意,所有类都标记为公共):

public interface DummyInterface
{ }
public class MyCTP<T> : UserControl, DummyInterface
{ }

我不需要界面,但我想保留模板。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

解决方案是com可见性,然后它将传递COM(Active X)对象。

   [ComVisible(true)]
   public class MyIntCTP : MyCTP<int>
   { }

尝试以下链接,他们会给你一个概述,这将有所帮助。 https://msdn.microsoft.com/en-us/library/aa942861.aspx

查看下面给出的git链接以帮助项目。 https://github.com/KevinT/ExcelDna/blob/master/Distribution/Samples/CustomTaskPane.dna