首页 文章

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

提问于
浏览
0

从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");
        }
    }
}

将“Make assembly 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

    根据您的所作所为:

    • 你添加了ProgId

    • 您已添加GUID

    • 你已经使用了dll

    • COM可见

    你需要这样做:

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

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

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

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

    现在你可以使用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
    

相关问题