Я использую COM видимую библиотеку C#, которую я вызываю из VBA в Excel. Вызываемый метод C# включает аргументы, переданные ref. Я использую VS2010, Office 2010, .NET Framework 4.VBA/C# COM interop - Ошибка 430
В более ранней версии моего файла Excel, вызов библиотеки прекрасно работает и до сих пор.
В новой версии (сам вызов библиотеки C# не изменился), VBA удается вызвать библиотеку, однако при завершении метода C# я получаю ошибку времени выполнения 430 «Класс не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс ». Для этого я использовал режим DEBUG. В том же файле VBA удается вызвать развернутую библиотеку .NET.
Что я пробовал: - Re-добавления ссылки на библиотеку OLE Automation в VBA. - Повторная сборка библиотеки C#
Я немного озадачен тем, что может быть неправильным и где. Сам Excel, похоже, не является проблемой, так как работает мой старый файл. Библиотека C# вызывается из моего старого файла, поэтому проблема не должна возникать из библиотеки. Что касается способности моего файла вызывать COM видимые библиотеки, ну, то вызов другой библиотеки C# работает (тот, который развернут).
Любая помощь была бы высоко оценена!
УВА вызов 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# выглядит следующим образом:
-Интерфейс
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# interop, либо Excel не поддерживает то, что вы просили его сделать. Поскольку он работает с более старой версией файла, кажется вероятным, что вы просите excel 2010 сделать что-то, используя snytax 2003. Наблюдение за некоторым кодом должно позволить нам определить, что это такое. – Pynner
Просто отправил код в соответствии с запросом. Оба файла excel - это файлы excel 2010. – user1153715