我在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
{ }
我不需要界面,但我想保留模板。有什么想法吗?
答案 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