调用dll方法时发生FatalExecutionEngineError

时间:2011-05-16 10:45:15

标签: c# .net

在我的节目中:

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#中使用它

2 个答案:

答案 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签名不正确的重要指标。

您能否提供原生签名,以便我们帮助诊断此问题?