gpt4 book ai didi

c# - 无法从 VBA (VB6 ok) 实例化用 C# 编写的 COM 对象

转载 作者:可可西里 更新时间:2023-11-01 08:41:50 29 4
gpt4 key购买 nike

使用 VS 2008,这是我的 COM 对象

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace TestCom
{
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("Test9.COMINT")]
public class TestComClass
{
public void Init(string userid, string password)
{
MessageBox.Show(string.Format("{0}/{1}", userid, password));
}
}
}

如果我按如下方式构建并在生产机器上注册它

REGASM /CODEBASE TESTCOM.DLL

从一个简单的 VB6 应用程序,这工作正常

Private Sub Form_Load()
Dim o As Object
Set o = CreateObject("Test9.COMINT")
o.Init "A", "B"
End Sub

从 Excel 中的 VBA 调用的这段完全相同的代码给出了

"automation error" (0x80131700)

在开发机器上一切正常,只是在只安装了 .NET 和 MS Office 的生产机器上不行。

更新

我认为这与在 Excel 下运行时未正确初始化 .NET 框架有关。如果我使用 Filemon,我可以看到它跳过寻找 MSCORWKS.DLL。当我从 VBScript 调用同一对象时,它发现 MSCorwks.dll 正常。

当我从 VBA 调用 CorBindToCurrentRunTime 以尝试强制加载 CLR 时,有趣的是,我得到的 HRESULT (0x80131700) 与我执行 CreateObject( ) 在 VBA 中。

因此我认为这是一个框架初始化问题。

最佳答案

我要回答我自己的问题,希望能让其他人免去我刚刚忍受的乏味苦差事的时间。

如果你得到这个,那因为基于 .NET 的 COM 程序集找不到 .NET 框架

解决方法很简单。创建包含以下内容的文件

<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>

将其命名为“Excel.Exe.Config”并将其放在与“EXCEL.EXE”相同的目录中

问题解决了!

关于c# - 无法从 VBA (VB6 ok) 实例化用 C# 编写的 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375457/

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