Excel에서 VBA에서 호출하는 COM 표시 C# 라이브러리를 사용하고 있습니다. 호출되는 C# 메서드에는 ref에서 전달 된 인수가 포함됩니다. VS2010, Office 2010, .NET Framework 4를 사용 중입니다.VBA/C# COM interop - 오류 430
이전 버전의 Excel 파일에서는 라이브러리 호출이 정상적으로 작동하지만 여전히 작동합니다.
최신 버전 (C# 라이브러리의 호출 자체는 변경되지 않음)에서 VBA는 라이브러리를 호출하지만 C# 메서드가 완료되면 런타임 오류 430 "클래스가 자동화를 지원하지 않습니다. 예상 인터페이스를 지원하지 않습니다 ". 나는 그것을보기 위해 DEBUG 모드를 사용했다. 동일한 파일에서 VBA는 배포 된 .NET 라이브러리를 호출합니다. - 다시 추가 VBA에서 OLE 자동화 라이브러리에 대한 참조를 을 : 나는 시도 무엇
나는 무엇이 잘못 될 수 있는지에 대해 의아해합니다. 이전의 파일이 작동하기 때문에 Excel 자체가 문제가 아닌 것 같습니다. C# 라이브러리는 이전 파일에서도 호출되므로 문제는 라이브러리에서 가져 오지 않아야합니다. 내 파일이 COM 가시 라이브러리를 호출하는 능력에 관해서는, 다른 C# 라이브러리에 대한 호출이 작동합니다.
도움이 될 것입니다.
- 인터페이스
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";
}
}
}
:
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#의 모습을 다음과 같이
CSHARP에 대한 VBA 호출입니다
Csharp 메서드 호출이 잘 작동합니다. Csharp는 정상적으로 실행되고 "반환"ok ","포커스 "가 VBA에 돌아 왔을 때 오류 430 메시지가 나타납니다.
실패한 실제 라인을 게시 할 수 있습니까? 이 오류 메시지는 C# interop 또는 Excel에서 수행하도록 요청한 작업을 지원하지 않는 작업을 수행하려고한다고 말합니다. 그것은 이전 버전의 파일에서 작동하기 때문에 2003 snytax를 사용하여 무언가를하도록 Excel 2010에 요청하는 것 같습니다. 일부 코드를 보면 그것이 무엇인지 판단 할 수 있어야합니다. – Pynner
요청에 따라 일부 코드를 게시했습니다. 두 파일 모두 Excel 파일을 사용합니다. – user1153715