C# 调用dll方法时发生FatalExecutionEngineerError

C# 调用dll方法时发生FatalExecutionEngineerError,c#,.net,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

在我的程序中的这一行:

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#

中使用它。
fatalexecutionenignererror
通常是核心CLR本机代码中的损坏导致的致命本机异常。当它发生在
PInvoke
呼叫的位置时,这是一个很大的指标
PInvoke
签名不正确

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

我已经解决了我的问题! 代码不是这样工作的:

StringBuilder err = new StringBuilder();
int value = MTEConnect(auth_string, err);
StringBuilder err = new StringBuilder(100);
int value = MTEConnect(auth_string, err);
但它确实是这样工作的:

StringBuilder err = new StringBuilder();
int value = MTEConnect(auth_string, err);
StringBuilder err = new StringBuilder(100);
int value = MTEConnect(auth_string, err);

缓冲区似乎太短。

我不知道什么是本机签名,在哪里可以得到它?如果有帮助的话,也许我可以共享我正在使用的dll?如果这很重要,那么我有两个相同dll的版本。它们应该是“兼容的”,即应该可以相互替换。但是,当我的代码与一个dll一起工作时,它与另一个dll不工作(没有对代码进行任何更改),我将不工作的dll放在这里(如果您愿意,我也可以通过电子邮件发送给您:)@javapowered您有定义函数MTEConnect的头文件吗?我现在没有这个特定库的.h文件,但我非常确定该函数必须像“int32 WINAPI MTEConnect(char*Params,char*ErrorMsg);”那样声明。明天我将向库的开发人员索取*.h文件。。。也许有可能以某种方式从*dll文件中提取您请求的信息?…我也是:)花了一周时间解决了这个难题:)+1为我节省了一天时间,因为我使用StringBuilder获取Win32 Spooler dll的默认打印机(winspool.drv)