Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sample.exe中0x7537812f处未处理的异常:0xC002001:字符串绑定无效_C#_C++_C - Fatal编程技术网

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

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

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

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

我的应用程序是在Visual Studio 2012专业中用C语言编写的Windows窗体,程序使用了在C语言中编写的DLL中的一些原生函数。我在Internet上研究,但几乎所有的解决方案都不使用静态变量,或者在VisualStudio C++中用“代码>/CLR < /代码>”编译DLL,但我的dll是来自第三方的C代码,它是由MingGW构建的,所以我不能遵循这些解决方案。改变静态变量是不可能的


请帮我找到解决方案?

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

原因可能是,程序的某些代码使用了一些已经被销毁的数据。 如果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源代码中的所有静态变量。你有其他解决办法吗?