自定义C#DLL,来自VBA的错误429

时间:2016-08-30 09:20:49

标签: c# excel dll

从VBA调用简单的C#DLL遇到严重问题,无法让它工作。尝试了几件似乎对其他人有用的事情,但没有运气。

计算机1:Windows 7,Visual Sudio 2013 Express,Office 2010

这是我的C#代码:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace DLLTester3
{
    [Guid("6A40F90B-B8FC-4F4A-9B4C-850279D45B3B")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("DLLTester3.DoSometing")]
    public class DLLTester3
    {
        public void DoSometing()
        {
            MessageBox.Show("Hello world");
        }
    }
}

将“使程序集COM-visible”和“Register form COM interop”设置为true,签署程序集。

从Excel运行以下VBA按预期工作:

Option Explicit

Sub DoIt()
    Dim Something As DLLTester3.DLLTester3
    Set Something = New DLLTester3.DLLTester3
    Call Something.DoSometing
End Sub

机器2:Windows 10,Office 2013
机器3:Windows Server 2008,Office 2010
复制DLL,使用带有/codebase选项的REGASM注册它,两台机器都给出了错误429。

欢迎提出建议!

1 个答案:

答案 0 :(得分:0)

根据您的所作所为:

  • 您添加了ProgId
  • 您已添加GUID
  • 你有sigend dll
  • COM可见

你需要这样做:

  1. 使用正确版本的gacutil将您的dll添加到GAC

    C:\ VBS \ DNFW4 \ gacutil.exe / i XXX.dll

  2. 使用正确版本的RegAsm来注册dll

    C:\ VBS \ DNFW4 \ RegAsm.exe XXX.dll

  3. 现在您可以使用vbs进行测试:

    On Error Resume Next
    
    Err.Clear
    
    Set Obj=CreateObject("ProgId")
    
    'output the error msg
    If Err.Number <> 0 Then
        WScript.Echo "Error: " & Err.Number
        WScript.Echo "Error (Hex): " & Hex(Err.Number)
        WScript.Echo "Source: " &  Err.Source
        WScript.Echo "Description: " &  Err.Description
        'Err.Clear
        'Quit
        WScript.Quit(Err.Number)
    End If
    
    'On Error Goto 0
    
    'invoke the add method
    WScript.Echo obj.Add(1,2)
    
    
    set obj=Nothin