Sample.exe 中 0x7537812f 处的未处理异常:0xC0020001:字符串绑定无效 [重复]

Posted

技术标签:

【中文标题】Sample.exe 中 0x7537812f 处的未处理异常:0xC0020001:字符串绑定无效 [重复]【英文标题】:Unhandled exception at 0x7537812f in Sample.exe: 0xC0020001: The string binding is invalid [duplicate] 【发布时间】:2013-12-16 08:21:50 【问题描述】:

我正在尝试找到一种方法来调试我的应用程序,但这对我来说非常困难。错误是当我关闭程序时,有时会显示如下错误代码:

Sample.exe 中 0x7537812f 处的未处理异常:0xC0020001: 字符串绑定无效

我的应用程序是在 Visual Studio 2012 Professional 中用 C# 编写的 Windows 窗体,该程序使用 C 编写的 dll 中的一些本机函数。我在互联网上进行了研究,但几乎所有解决方案都没有使用静态变量或编译在 Visual Studio for C++ 中使用 /clr 的 dll,但我的 dll 是来自第三方的 C 代码,它是由 MingGW 构建的,所以我无法遵循这些解决方案。改变静态变量是不可能的。

请帮我找到解决办法?

【问题讨论】:

你能显示抛出异常的代码吗?以及外部函数的签名? 您认为这是由 C 代码引起的假设是不正确的,这是 C++/CLI 异常。您必须显示非托管调用堆栈以使您的问题可信。启用非托管调试以获得一个。 【参考方案1】:

没有代码,很难说出问题所在。但是,当您说崩溃(有时)在应用程序关闭期间发生时,您可能无法轻松提供正确的代码。

原因可能是程序的某些代码使用了一些数据,这些数据已经被破坏了。 如果您的 DLL 的内部实现是 C++,例如析构函数可以访问在类实例之前已被删除或静态创建的数据。这意味着,DLL 在内部导致崩溃。对于某种 close API 函数的显式调用可能是唯一的帮助。

另一个原因可能是,您在 C# 类中实例化 DLL,该类在垃圾回收中被销毁。由于实例被“不受控制”地破坏,它们可以调用已经卸载的 DLL API。一个表明 DLL API 有效性的标志将有助于解决这个问题。

所以我的建议是:

检查,如果您的 DLL 提供了用于关闭或清理的 API 函数 up 或 unloading - 调用它并且不要调用任何其他 API 函数 之后的DLL。使用例如一个全局标志,只访问 DLL 如果国旗允许。 (穷人的方法,更好 - 封装 C# 类中的 DLL)

尝试在您的 C# 的任何测试函数中加载和卸载 DLL 以进行制作 错误更容易重现。

确保在您的 C# 开始关闭过程时不要调用任何 DLL函数不再(除了一次调用clean/close/unload)

希望对你有帮助。

【讨论】:

我尝试按照您的指南进行操作,但仍未解决。我认为此异常与 C 程序中使用静态变量有关,但我无法删除 C 源代码中的所有静态变量。你有其他解决方案吗?

以上是关于Sample.exe 中 0x7537812f 处的未处理异常:0xC0020001:字符串绑定无效 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

求教在delphi中,如何把两个exe做为res加入到另一个exe中,并在运行时释放两个exe

如何仅压缩文件夹内的文件而不压缩子文件夹?

在Electron中执行exe(Inside Project结构)

我可以设置Python 3.5 subprocess.Popen管道编码吗?

TensorRT--用fp16精度运行 比 fp32还慢?

在数字中的特定数字处查找数字[关闭]