gpt4 book ai didi

c# - 自定义 C# DLL 给出 VBA 429 错误

转载 作者:行者123 更新时间:2023-11-30 22:13:36 25 4
gpt4 key购买 nike

我正在想办法解决这个问题。我尝试了很多我在网上看到的东西,但没有成功。我尝试过:使用 regasm,将目标编译为 x86,dumpbin dll/t:dll.tlb,更改 Framework 的版本等。

我有两台机器(M1 和 M2),都装有 Windows 7 64 和 VS2012。当我在 M1 中开发 COM 时,它在 M1 的 VBA 中运行良好。但它不适用于 M2(错误 429)。然后,如果我转到 M2 并编写一个新的 COM,它在 M2 的 VBA 中工作正常,但不适用于 M1。

看来 VS2012 正在执行一个我看不到的“隐藏”注册步骤。有人知道怎么找到吗?

非常感谢!下面是我的“COM Hello World”。我也在为 COM 互操作使用 Register。

更新:

如果我运行:

C:\windows\Microsoft.NET\Framework\v4.0.30319\regasm TesteLib.dll /TesteLib.tlb 

429 错误消失。但是现在,我在同一行中收到“错误 -2147024894 (80070002) 自动化错误”,而不是错误 429。

我遵循了 Can't instantiate a COM object written in C# from VBA (VB6 ok) 中的解决方案在 EXCEL.exe 文件夹中创建一个 Excel.Exe.Config,我的程序现在运行良好。但我认为我无法在客户端机器上执行此操作。有替代方案吗?

此外,它在 VB6 中工作正常(无需执行 REGASM)。

.net 端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace TesteLib
{
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("c6b093c6-f568-4962-8955-795fc14f34bb")]
[ComVisible(true)]
public interface ClassInt1
{
int sum(int a, int b);
}

[ClassInterface(ClassInterfaceType.None)]
[Guid("19ff9b41-8652-4012-ac55-c1a1d8f18cbb")]
[ComVisible(true)]
[ProgId("TesteLib.Class1")]
public class Class1 : COMException, ClassInt1
{
public int sum(int a, int b)
{
return a + b;
}
}

}

VBA 方面

Sub t()
Dim r As TesteLib.Class1
Set r = New TesteLib.Class1 'Run-time error '429': ActiveX component can't create object
MsgBox r.Sum(35, 51)
End Sub

最佳答案

现在可以了!

我需要使用带有选项/codebase 的 REGASM 来注册 DLL

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm /codebase TesteLib.dll 

当我包含选项/codebase 时,它​​会生成警告,但它有效:RegAsm 警告:使用/codebase 注册未签名的程序集会导致您的程序集干扰可能安装在同一台计算机上的其他应用程序。/codebase 开关仅用于已签名的程序集。请为您的程序集指定一个强名称并重新注册

然后,在 VS2012 中,我标记了选项 Project Properties > Signing > Sign the assembly > New... 并运行 REGASM。警告消失了,现在一切似乎都很好:)

谢谢!

关于c# - 自定义 C# DLL 给出 VBA 429 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com