相关疑难解决方法(0)

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

使用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));
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

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

REGASM /CODEBASE TESTCOM.DLL
Run Code Online (Sandbox Code Playgroud)

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

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

这个完全相同的代码从Excel中的VBA调用

"自动化错误"(0x80131700)

一切都在开发机器上运行良好,而不是只安装了.NET和MS Office的生产机器上.

更新

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

当我打电话CorBindToCurrentRunTime从VBA,试图强行加载CLR,有趣的是我得到确切同样的HRESULT (0x80131700),当我做CreateObject()在VBA.

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

.net c# com vba com-interop

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

com ×1

com-interop ×1

vba ×1