我正在使用從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