我正在使用从Excel中的VBA调用的COM可见C#库。被调用的C#方法包含由ref传递的参数。我使用VS2010,Office 2010的.NET框架4VBA/C#COM互操作 - 错误430
在我的Excel文件的早期版本,在调用库工作正常,仍然如此。在新版本(C#库调用本身没有改变)中,VBA设法调用库,但是当C#方法完成时,我得到一个运行时错误430“类不支持自动化或者不支持预期的接口“。我使用DEBUG模式来查看。在同一个文件中,VBA设法调用已部署的.NET库。
我的尝试: - 重新添加参考VBA OLE自动化库。 - 重新编译C#库
我对有什么可能是错误的以及在哪里有点困惑。 Excel本身似乎不是问题,因为我的旧文件起作用。 C#库也从我的旧文件中调用,所以问题不应该来自库。至于我的文件调用COM可见库的能力,那么对另一个C#库的调用就可以工作(部署这个库)。
任何帮助将不胜感激!
的VBA调用CSHARP如下:
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#的样子:
-Interface
namespace Dispatch
{
public interface iCaller
{
string solveDispatch(int a, bool flag, float[] input, ref float[] output);
}
}
-Class
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#interop或Excel不支持你要求它做的事情。由于它适用于该文件的较旧版本,因此您可能会要求Excel 2010使用2003 snytax做某些事情。看到一些代码应该让我们确定是什么。 – Pynner 2012-01-17 17:48:53
刚发布了一些代码。这两个excel文件都是excel 2010文件。 – user1153715 2012-01-18 10:21:43