我正在尝试找到一种调试我的应用程序的方法,但这对我来说非常困难。错误是当我关闭程序时,有时它显示错误代码如下:
Sample.exe中0x7537812f处的未处理异常:0xC0020001: 字符串绑定无效
我的应用程序是一个用Visual Studio 2012 Professional中用C#编写的窗体,该程序使用一个用C编写的dll中的一些本机函数。我在互联网上研究过,但几乎所有解决方案都没有使用静态变量或编译在Visual Studio for C ++中使用/clr
的dll,但我的dll是来自第三方的C代码,它是由MingGW构建的,因此我无法遵循这些解决方案。要改变静态变量是不可能的。
请帮我找到解决方案吗?
答案 0 :(得分:0)
没有代码,很难说出问题是什么。但是当你说,在应用程序关闭期间发生崩溃(有时),你可能无法轻松提供正确的代码。
原因可能是,程序的某些代码使用了一些已被破坏的数据。 如果您的DLL的内部实现是C ++,例如析构函数可以访问已删除的数据或在类的实例之前静态创建的数据。这意味着,DLL会在内部导致崩溃。对于那个明确的调用某种密切的API函数可能是唯一的帮助。
另一个原因可能是,您在C#类中实例化DLL,该类在垃圾回收中被销毁。随着实例被破坏“不受控制”,他们可以调用已经卸载的DLL API。发信号通知DLL API有效性的标志将有助于实现这一目标。
所以我的建议是:
检查,如果您的DLL提供关闭或清除的API函数 启动或卸载 - 调用它,不要调用任何其他API函数 DLL之后。使用例如一个全局标志,仅访问DLL 如果国旗允许它。 (穷人的方法,更好 - 扼杀了 C#类中的DLL)
尝试在C#的任何测试函数中加载和卸载DLL以进行制作 错误更容易重现。
确保,当您的C#开始关闭过程时,不要打电话给任何人 DLL函数了(除了一次调用clean / close / unload)
希望它有所帮助。