C# Sample.exe中0x7537812f处未处理的异常:0xC002001:字符串绑定无效
我正试图找到一种方法来调试我的应用程序,但这对我来说是非常困难的。错误是当我关闭程序时,有时会显示如下错误代码: Sample.exe中0x7537812f处未处理的异常:0xC002001: 字符串绑定无效 我的应用程序是在Visual Studio 2012专业中用C语言编写的Windows窗体,程序使用了在C语言中编写的DLL中的一些原生函数。我在Internet上研究,但几乎所有的解决方案都不使用静态变量,或者在VisualStudio C++中用“代码>/CLR < /代码>”编译DLL,但我的dll是来自第三方的C代码,它是由MingGW构建的,所以我不能遵循这些解决方案。改变静态变量是不可能的C# Sample.exe中0x7537812f处未处理的异常:0xC002001:字符串绑定无效,c#,c++,c,C#,C++,C,我正试图找到一种方法来调试我的应用程序,但这对我来说是非常困难的。错误是当我关闭程序时,有时会显示如下错误代码: Sample.exe中0x7537812f处未处理的异常:0xC002001: 字符串绑定无效 我的应用程序是在Visual Studio 2012专业中用C语言编写的Windows窗体,程序使用了在C语言中编写的DLL中的一些原生函数。我在Internet上研究,但几乎所有的解决方案都不使用静态变量,或者在VisualStudio C++中用“代码>/CLR < /代码>”编译DL
请帮我找到解决方案?没有代码,很难说问题出在哪里。但是,当您说,崩溃(有时)发生在应用程序关闭期间,您可能无法轻松提供正确的代码 原因可能是,程序的某些代码使用了一些已经被销毁的数据。 如果DLL的内部实现是C++,则析构函数可以访问类中实例之前已经删除或静态创建的数据。这意味着DLL会在内部导致崩溃。对于这种情况,调用某种close API函数可能是唯一的帮助 另一个原因可能是,您在一个C#类中实例化了DLL,它在垃圾收集中被销毁。当实例被“不受控制”地销毁时,它们可以调用已经卸载的DLL API。标志DLL API的有效性将有助于实现这一目标 因此,我的建议是:
- 检查DLL是否提供用于关闭或清理的API函数 启动或卸载-调用它,不要从中调用任何其他API函数 在那之后。例如,使用全局标志,仅访问DLL 如果国旗允许的话。(穷人的方法,更好-将 C#类中的DLL)
- 尝试在C#的任何测试函数中加载和卸载DLL,以便 该误差易于再现
- 确保当你的C#开始结束过程时,不要调用任何 DLL函数(一次调用clean/close/unload除外)
希望能有所帮助。能否显示引发异常的代码?以及外部函数的签名?您认为这是由C代码引起的假设是不正确的,这是C++/CLI异常。必须显示非托管调用堆栈才能使问题可信。启用非托管调试以获得一个。我尝试按照您的指南进行操作,但仍未解决。我认为这个异常与C程序中使用静态变量有关,但我不能删除C源代码中的所有静态变量。你有其他解决办法吗?