우리는 현재 C# API 인터페이스가 열려있는 프로그램을 만들고 있습니다. 우리가 지금 Invoke
가 실패합니다 Test Void
하려고하면, 그러나,Assembly InvokeMember try {} catch()
int[] Test = { 0, 3 };
private void Test()
{
Debug.Log(Test[4].ToString()); //Exception!!
}
컴파일 작품 : 자, 당신은 다음 C# 스크립트를 상상한다. 분명히 실패해야하지만 예외를 잡으려고합니다. 따라서 전체 애플리케이션은 동결하지 않습니다.
Assembly assembly = Assembly.LoadFrom("C:/Our/Path/To/Dll.dll");
Type type = assembly.GetType("ClassApplication1.Test");
object instance = Activator.CreateInstance(type);
type.InvokeMember("Test",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreReturn,
null,
instance,
null);
이 팝업은 응용 프로그램을 디버깅하지 않고 Visual Studio 2012에 표시됩니다. 응용 프로그램을 디버깅하지 않고 완료됩니다.
// 편집 :
나는 Debug.Log(Test[4].ToString()); //Exception!!
가 잘못하고 excetpion를 호출 할 것이라는 점을 알고있다 (!). 그것은 원했다. try {} 블록을 통해이 작업을 수행 할 수 있지만 스크립트는 타사에서 제작 한 것임을 명심하십시오. 나는 이것에 손을 대지 않아도 적어도 우리 애플리케이션은 에러를 표시하고 (richTextBox에 표시), 던지기보다는 (= 응용 프로그램 충돌) wan't하지 않습니다.
TLDR : 내 프로그램이 다운
테스트의 최대 크기는 초기화하는 방법과 동일합니다. 네 번째 색인에 액세스하려고합니다 ... 원하는 번호에 따라 0 또는 1로 변경하십시오. – Botonomous
'catch (Exception ex)'를 해보고 그 타입이 정말로'IndexOutOfRange'인지 또는'InvokeMember'에 의해 그 예외가 다른 것으로 싸여 있는지보십시오. –