簡體   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