在我这一行的程序中:
int value = MTEConnect(auth_string, err);
Run Code Online (Sandbox Code Playgroud)
我收到这样的例外:
FatalExecutionEngineError
The runtime has encountered a fatal error. The address of the
error was at 0x68c8a681, on thread 0x2334. The error code is
0xc0000005. This error may be a bug in the CLR or in the unsafe
or non-verifiable portions of user code. Common sources of this
bug include user marshaling errors for COM-interop or PInvoke,
which may corrupt the stack.
Run Code Online (Sandbox Code Playgroud)
MTEConnect 是这样导入的:
[DllImport("mtesrl.dll", CharSet = CharSet.Ansi)]
private static extern int MTEConnect(String pars, StringBuilder err);
Run Code Online (Sandbox Code Playgroud)
有什么问题以及如何解决?
upd:我可以在另一台机器上重现同样的问题,但我得到了一些更具描述性的消息:
Managed Debugging Assistant 'FatalExecutionEngineError' has detected a problem in 'C:\blahblah\MBClient\bin\Debug\MBClient.vshost.exe
Run Code Online (Sandbox Code Playgroud)
库本身是功能性的,因为它可以从其他应用程序中使用,我只是不能从 c# 中使用它
我已经解决了我的问题!代码不能这样工作:
StringBuilder err = new StringBuilder();
int value = MTEConnect(auth_string, err);
Run Code Online (Sandbox Code Playgroud)
但它确实以这种方式工作:
StringBuilder err = new StringBuilder(100);
int value = MTEConnect(auth_string, err);
Run Code Online (Sandbox Code Playgroud)
缓冲区似乎太短了。