我在奇数位置遇到NullReferenceException
。你可以看到它在图片中的位置:
在try catch之外和返回之后抛出了异常。 Move
和MoveResult
数据类型都是结构,不是引用类型。
以下是例外情况的详细信息:
System.NullReferenceException was unhandled
Message=Object reference not set to an instance of an object.
Source=MatinChess.Net
StackTrace:
at MatinChess.Net.MatinChess.MovePiece(Move move) in C:\Users\Matin\Documents\GitHub\MatinChessDLL\dotnet\MatinChess.Net\MatinChess.cs:line 37
at MatinChess.Net.Demo.Program.Main(String[] args) in C:\Users\Matin\Documents\GitHub\MatinChessDLL\dotnet\MatinChess.Net.Demo\Program.cs:line 31
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
我在Visual Studio 2015社区版上使用.NET Framework 2.0。
当我评论ExternMethods.MovePiece
行时,它不会抛出异常。
以下是此方法的定义:
[DllImport(dll, CallingConvention = CallingConvention.Cdecl)]
public extern static void MovePiece(Move movement, ref MoveResult result);
答案 0 :(得分:0)
您已经编辑了一个重要线索:被调用的方法,以某种方式引发此异常的方法,是使用[DllImport(...)]
定义的。
由于在调用此外部函数的方法结束时抛出异常,因此很可能C#中指定的签名与编译到此dll中的函数的签名不匹配。
这可能会导致堆栈在您调用时损坏。此类腐败的症状可能包括:
由于您现在已经确认在更改MoveResult结构后,异常已经消失,因此可以肯定地说这就是发生的事情。