【问题标题】:VBA/C# COM interop - Error 430VBA/C# COM 互操作 - 错误 430
【发布时间】:2012-01-18 22:22:08
【问题描述】:

我正在使用从 Excel 中的 VBA 调用的 COM 可见 C# 库。调用的 C# 方法包括 ref 传递的参数。我正在使用 VS2010、Office 2010、.Net 框架 4。

  • 在我的 Excel 文件的早期版本中,对库的调用工作正常,现在仍然正常。

  • 在较新的版本中(对 C# 库的调用本身没有改变),VBA 设法调用该库,但是当 C# 方法完成时,我得到一个运行时错误 430“类不支持自动化或不支持预期的接口”。我使用 DEBUG 模式来查看。在同一个文件中,VBA 设法调用已部署的 .NET 库。

我尝试了什么: - 在 VBA 中重新添加对 OLE 自动化库的引用。 - 重新编译 C# 库

我有点不明白什么地方出了问题。 Excel 本身似乎不是问题,因为我的旧文件有效。 C# 库也是从我的旧文件中调用的,所以问题不应该来自库。至于我的文件调用 COM 可见库的能力,那么,对另一个 C# 库的调用是有效的(那个已部署)。

任何帮助将不胜感激!


对 csharp 的 VBA 调用如下:

Dim csharptoolsDispatch As Object
Set csharptoolsDispatch = CreateObject("Dispatch.Caller")
Dim a as string
ReDim input(0 to 5) as single 
ReDim output(0 to 5) as single 
a = csharptoolsDispatch.solveDispatch(2, False, input, output)

C# 看起来像:

-接口

namespace Dispatch
{
   public interface iCaller
   {
       string solveDispatch(int a, bool flag, float[] input, ref float[] output);
   }
}

-类

namespace Dispatch
{
    [ClassInterface(ClassInterfaceType.None)]
    [ComVisible(true)]
    public class Caller : iCaller
    {
        public string solveDispatch(int a, bool flag, float[] input, ref float[] output)
        {    
           //code
           return "ok";
        }
    }
}

对 Csharp 方法的调用工作正常,Csharp 运行正常,并且在“返回“ok””之后,当“焦点”回到 VBA 上时,我收到错误 430 消息。

【问题讨论】:

  • 你能发布失败的实际行吗?该错误消息表明您正在尝试执行 C# 互操作或 Excel 不支持您要求它执行的操作。由于它适用于文件的旧版本,因此您似乎要求 excel 2010 使用 2003 snytax 执行某些操作。看到一些代码应该可以让我们确定那是什么。
  • 刚刚按要求发布了一些代码。两个 excel 文件都是 excel 2010 文件。

标签: c# excel vba com


【解决方案1】:

好的,我设法解决了。

事后看来,这是一个非常明显的错误,但 VBA 和 C# 之间的 COM 互操作接口的奇怪行为使其难以被发现。

在 C# 的 VBA 调用中,在参数中,有一个单表,它在 C# 中被定义为一个 int 表。该论点是在参考文献中传递的。

在这种情况下,我希望 VBA 会崩溃说“无效参数”或其他内容。相反,似乎有一个隐式转换为 int 的单一类型,这使得对 C# 的调用成为可能。 然后,当 csharp 方法完成时,VBA 似乎无法理解它在 ref 中传递的参数以及更改的类型。这会导致 430 错误。

我的早期版本没有这个错误,因此有效。

我必须记住 VBA 是非常弱类型的!

总之,谜团解开了!

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2013-11-20
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多