在我的节目中:
int value = MTEConnect(auth_string, err);
我收到了这样的例外:
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.
以这种方式导入MTEConnect:
[DllImport("mtesrl.dll", CharSet = CharSet.Ansi)]
private static extern int MTEConnect(String pars, StringBuilder err);
问题是什么以及如何解决?
upd:我可以在另一台机器上重现同样的问题,但我得到了一些更具说服力的信息:
Managed Debugging Assistant 'FatalExecutionEngineError' has detected a problem in 'C:\blahblah\MBClient\bin\Debug\MBClient.vshost.exe
库本身是有用的,因为它可以从其他应用程序中使用,我只是不能从c#中使用它
答案 0 :(得分:4)
我已经解决了我的问题! 代码不能以这种方式工作:
StringBuilder err = new StringBuilder();
int value = MTEConnect(auth_string, err);
但它确实有效:
StringBuilder err = new StringBuilder(100);
int value = MTEConnect(auth_string, err);
似乎缓冲区太短了。
答案 1 :(得分:1)
FatalExecutionEnigneError
通常是核心CLR本机代码中的损坏导致致命的本机异常的结果。当它发生在PInvoke
电话的网站上时,它是PInvoke
签名不正确的重要指标。
您能否提供原生签名,以便我们帮助诊断此问题?