从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。
欢迎提出建议!
答案 0 :(得分:0)
根据您的所作所为:
你需要这样做:
使用正确版本的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