从vba调用c#COM dll

时间:2016-07-27 14:04:08

标签: c# vba dll ms-word com

我创建了一个类库,其中包含一个表单,用户可以从中选择数据库中的项目。我希望能够通过功能区上的按钮从单词中的vba运行此dll。

到目前为止,我已经创建了Windows窗体,它在构建为Windows应用程序时可以正常工作。当构建为类库并且在WordAddin项目中引用dll时,它按预期工作。当我尝试从vba代码运行dll表单时,会出现此问题。

我添加了ddl作为参考,并确保类库是Com Visible(属性>构建>注册COM互操作,程序集信息>使程序集COM-Visible和[ComVisible(true)]在上面类)。我还强烈签署了该项目并使用regAsm.exe / codebase" ddl path"进行了无错误注册。

以下是尝试打开表单的vba代码。 oForm1.ShowDialog上的代码错误与错误:自动化错误。

Public Sub TimecardLookup()
    Dim oForm1 As New GeldardsTimecardLookup.Form1
    oForm1.ShowDialog

    Dim a As String
    a = oForm1.outputText

    ActiveDocument.Application.Selection.Range.Text = a
End Sub

我认为我在我的dll中缺少一个设置,我也启用了[ClassInterface(ClassInterfaceType.AutoDual)],以允许intellisense。所有类库都显示一个对话框,通过Entity Framework从SQL数据库中读取并返回一个字符串。

1 个答案:

答案 0 :(得分:2)

  

运行时错误'-2146233079(80131509)'自动化错误。

8013表示此错误是由.NET异常引起的。 1509说这是一个InvalidOperationException。没有理由认为这与您构建或注册项目的方式有关。当管理异常是一个报告它们的本机应用程序时,管理异常并不会更容易进行故障排除,你无法获得神圣的堆栈跟踪来告诉你它死在哪里。

您必须使用调试器来查找原因。项目>属性>调试选项卡>选择“启动外部程序”并选择Office应用程序可执行文件,在这种情况下为WinWord.exe。使用Debug>异常并勾选CLR异常的Thrown复选框,以便在抛出异常时调试器停止。按F5。如果无法在失败的机器上安装调试器,请使用DebugDiag实用程序。