C# 调试帮助:包装的c++;DLL在一个应用程序中运行良好,导致另一个应用程序崩溃

C# 调试帮助:包装的c++;DLL在一个应用程序中运行良好,导致另一个应用程序崩溃,c#,c++,debugging,dll,unmanaged,C#,C++,Debugging,Dll,Unmanaged,我正在将一些C#演示代码从命令窗口应用程序迁移到WPF应用程序。演示代码正在访问一个包的非托管C++库。该库是由第三方提供的,因此我无法访问该代码 虽然演示代码运行良好,但经过一段时间后,完全相同的代码在我的WPF应用程序中崩溃。访问了库,加载了一些配置文件,但当我调用某个方法时,我的应用程序抛出了一个错误(我必须启用“非托管代码调试”才能看到它): 这是引发错误的部分: unsafe { fixed (S_DATA* pim = &_im) { bool

我正在将一些C#演示代码从命令窗口应用程序迁移到WPF应用程序。演示代码正在访问一个包的非托管C++库。该库是由第三方提供的,因此我无法访问该代码

虽然演示代码运行良好,但经过一段时间后,完全相同的代码在我的WPF应用程序中崩溃。访问了库,加载了一些配置文件,但当我调用某个方法时,我的应用程序抛出了一个错误(我必须启用“非托管代码调试”才能看到它):

这是引发错误的部分:

unsafe
{
    fixed (S_DATA* pim = &_im)
    {
        bool success = false;
        try
        {
             success = RunAnalytics(_im); // <--- returns false, error message in debugger
        }
        catch (Exception ex)
        {
            throw new ScrException("ERROR: Unmanaged exception", ex);
        }
    }
}
不安全
{
固定(S_数据*pim=&U im)
{
布尔成功=假;
尝试
{
success=RunAnalytics(_im);//失败
  • 虚拟解决方案中的原始WPF>工作
  • 原始解决方案中的虚拟CMD>有效
  • 虚拟解决方案中的虚拟CMD>有效
  • 虚拟解决方案中的最小WPF>有效
  • 原始解决方案中的最小WPF>有效
  • 我其实一点也不聪明


    编辑2:经过很长很长一段时间,我终于明白了这一点-一个构建后脚本干扰了一些本地资源,这些本地资源被复制到了另一个之上,因此我使用了一个过时的配置文件和一些新的设置…这不是一个非常令人满意的解决方案。

    您还需要启用本机调试。这将允许您在P,将C++代码添加到C++代码中。如果单步执行,则在MSGBOX之后,应该在第一个语句上进行断线。确保C++的DLB的PDB在同一个目录中。您试图分配比您可用的更多的内存。“分配多少"变成负数。因此,如果不查看
    RunAnalytics
    ,就不可能说出该代码有什么问题。@cup:我没有相应的.pdb文件,也没有dll的代码。我有一个.exp和.lib文件。@matstpeterson:谢谢您提供的附加信息。因此,如果不知道它是什么,就没有机会了dll的de?好吧,你可以调试汇编代码,但是如果dll不是那么简单,那么给开发dll的人一个代码示例,向他们展示问题,并说“帮助,它工作不正常??”会非常困难,而且可能更容易
    unsafe
    {
        fixed (S_DATA* pim = &_im)
        {
            bool success = false;
            try
            {
                 success = RunAnalytics(_im); // <--- returns false, error message in debugger
            }
            catch (Exception ex)
            {
                throw new ScrException("ERROR: Unmanaged exception", ex);
            }
        }
    }