Calling a c# COM dll from vba

本文关键字:from vba dll COM Calling | 更新日期: 2023-09-27 17:58:48

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

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

我添加了ddl作为引用,并确保类库是Com可见的(类上方的Properties>Build>Register for Com interop,Assembly Information>Make Assembly Com Visible and[ComVisible(true)])。我还对该项目进行了强有力的签名,并使用regAsm.exe/codebase"ddl path"进行了注册,没有出现任何错误。

以下是试图打开表单的vba代码。oForm1.ShowDialog行上的代码错误,错误为:Automation错误。

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)],以实现智能感知。类库所做的只是显示一个对话框,通过实体框架从SQL数据库中读取并返回一个字符串。

Calling a c# COM dll from vba

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

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

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