3

我遇到了最奇怪的问题CustomTaskPaneFactoryin Excel-DNA 0.32

CustomTaskPaneFactoryMyIntCTP当我创建具有从模板化任务窗格 ( ) 继承的类 ( ) 的任务窗格时引发异常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-DNACreateCustomTaskPane在以下情况下崩溃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
{ }

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

4

1 回答 1

3

我遇到了同样的问题。

解决方案是 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

于 2015-10-15T16:34:56.637 回答