繁体   English   中英

从VBA调用AC#COM DLL

[英]Calling a c# COM dll from vba

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

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

我已经添加了ddl作为参考,并确保类库是Com Visible(属性>生成>注册COM interop,程序集信息>使程序集成为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)],以允许智能感知。 类库所做的全部工作就是显示一个对话框,并通过Entity Framework从SQL数据库中读取并返回一个字符串。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM