从 C# 调用非托管 C++ 库 (dll) 会产生访问冲突错误 (0xc0000005)

2023-12-01

抱歉问了这么长的问题。我只是想包括我目前所知道的有关该问题的所有信息。

我正在使用 Visual Studio 2008 用 C# 创建一个 Windows 窗体程序,该程序调用用 C++ 编写的库。
C++ DLL 分析由多个样本组成的测量数据。样本通过函数传递到库(PDSetWaveSample) 它接受一个结构体作为参数。
设置完所有样本后,用另一个函数处理测量数据(PDPreProcess)它也接受一个结构体作为参数。
C++ DLL 将所有测量数据保存在其内部数据结构中,并进行所有处理以获得结果。

在程序开始处理测量数据之前,一切似乎都正常运行。此时程序崩溃并退出并出现以下错误:

程序“XXX.vshost.exe:托管”已退出,代码为 -1073741819 (0xc0000005)。

我将在本问题后面添加更多调试信息和 C# 源代码。

您是否有任何提示如何继续或可能导致这种情况的原因是什么?

我运行的是 Windows XP Professional,版本 2002 SP 3。

当程序崩溃时,它首先给出此错误消息

未知模块中发生“System.ExecutionEngineException”类型的未处理异常。

以及中断或继续的可能性。我选择打破。

之后我看一下程序集:

不会为任何调用堆栈帧加载任何符号。无法显示源代码。

根据调试器的说法,发生错误时的程序集如下所示:

7C90E4FA  call        7C90E528 
7C90E4FF  mov         eax,dword ptr [esp] 
7C90E502  mov         esp,ebp 
7C90E504  pop         ebp  
7C90E505  ret              
7C90E506  lea         esp,[esp] 
7C90E50D  lea         ecx,[ecx] 
7C90E510  mov         edx,esp 
7C90E512  sysenter         
==>7C90E514  ret              
7C90E515  lea         esp,[esp] 
7C90E51C  lea         esp,[esp] 
7C90E520  lea         edx,[esp+8] 
7C90E524  int         2Eh  
7C90E526  ret              
7C90E527  nop              
7C90E528  push        ebp  
7C90E529  mov         ebp,esp 
7C90E52B  pushfd           

执行停止于7C90E514 ret(我用==>标记)

输出窗口显示以下消息:

'CalculationForm.exe': Loaded 'C:\CalculationForm\CalculationForm\bin\Debug\CalculationForm.exe', No native symbols in symbol file.  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\ntdll.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\kernel32.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\sysfer.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\mscoree.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\advapi32.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\rpcrt4.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\secur32.dll'  
'CalculationForm.exe': Loaded 'C:\WINNT\system32\shlwapi.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\gdi32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\user32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\msvcrt.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\imm32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989\msvcr80.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\shell32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\comctl32.dll'
'CalculationForm.exe': Loaded 'C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Culture.dll' 
'CalculationForm.exe': Unloaded 'C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Culture.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\mscorlib\17179b71d7680399c00ce88ddc310209\mscorlib.ni.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\ole32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\MSCTF.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\Tyohakemisto\WaveRoller\CalculationForm\CalculationForm\bin\Debug\CalculationForm.exe', Symbols loaded. 
'CalculationForm.exe': Loaded 'C:\WINNT\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\System\2f867d97fb1a34e4d6985780631574bb\System.ni.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\System.Drawing\f78f03ba3b1b21e3b26369402c117d33\System.Drawing.ni.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\System.Windows.Forms\06b728c1e4ea291d4febee5ca33db4b4\System.Windows.Forms.ni.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\System.Configuration\b2f3e4c45a980474c2dd08166038d645\System.Configuration.ni.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\System.Xml\8ee82dfeff03ca87492149cdcbfc3f21\System.Xml.ni.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'CalculationForm.exe': Loaded 'ImageAtBase0x10000000'
'CalculationForm.exe': Unloaded 'ImageAtBase0x10000000' 
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll' 
'CalculationForm.exe': Loaded 'C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\x86\Microsoft.VisualStudio.Debugger.Runtime.Impl.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_d495ac4e\msvcr90.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\uxtheme.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\xpsp2res.dll', Binary was not built with debug information. 
'CalculationForm.exe' (Managed): Loaded 'C:\CalculationForm\CalculationForm\bin\Debug\AxInterop.PDCOMMXLib.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.6002.22509_x-ww_c7dad023\GdiPlus.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\version.dll' 
'CalculationForm.exe': Unloaded 'C:\WINNT\system32\version.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\MSCTFIME.IME' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\oleaut32.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\Microsoft.NET\Framework\v2.0.50727\diasymreader.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\clbcatq.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\comres.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\version.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\msi.dll' 
'CalculationForm.exe': Loaded 'C:\Nortek\PdCommX\PdCommX.dll', Binary was not built with debug information. 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\mfc100.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\msvcr100.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\msimg32.dll'
'CalculationForm.exe': Loaded 'C:\WINNT\system32\msvcp100.dll' 
'CalculationForm.exe': Loaded 'C:\WINNT\system32\sxs.dll' 
'CalculationForm.exe' (Managed): Loaded 'C:\ CalculationForm\CalculationForm\bin\Debug\Interop.PDCOMMXLib.dll'
'CalculationForm.exe': Loaded 'C:\WINNT\assembly\NativeImages_v2.0.50727_32\Accessibility\775f9f0da40c277eb7d460084858a2ac\Accessibility.ni.dll'
'CalculationForm.exe' (Managed): Loaded 'C:\WINNT\assembly\GAC_MSIL\Accessibility\2.0.0.0__b03f5f7f11d50a3a\Accessibility.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread 'Win32 Thread' (0x1f08) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1cc4) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1598) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0xaa8) has exited with code 0 (0x0). 
The thread 'Win32 Thread' (0x1db8) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1e74) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1958) has exited with code 0 (0x0).
The program '[4656] CalculationForm.exe: Managed' has exited with code 0 (0x0).
The program '[4656] CalculationForm.exe: Native' has exited with code 0 (0x0).

当程序结束时,调用堆栈为:

ntdll.dll!7c90e514()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!7c90df5a()    
kernel32.dll!7c8025db()     
mscorwks.dll!79e8c639()     
mscorwks.dll!79e8c56f()     
mscorwks.dll!79f7466d()     
mscorwks.dll!7a105cf1()     
mscorwks.dll!7a105e37()     
mscorwks.dll!7a1061db()     
mscorwks.dll!7a09c314()     
mscorwks.dll!79f504da()     
mscorwks.dll!79ef4755()     
ntdll.dll!7c9032a8()    
ntdll.dll!7c90327a()    
ntdll.dll!7c92a8c3()    
ntdll.dll!7c90e48a()    
ntdll.dll!7c94b721()    
ntdll.dll!7c919f68()    
ntdll.dll!7c919f68()    
ntdll.dll!7c919f68()    
ntdll.dll!7c919f68()    
ntdll.dll!7c910385()    
ntdll.dll!7c917c51()    
ntdll.dll!7c917e8f()    
mscorwks.dll!79e71b4c()     
mscorwks.dll!79e821f9()     
mscorwks.dll!79e96571()     
mscorwks.dll!79e965a4()     
mscorwks.dll!79e965c2()     
mscorwks.dll!79ecca87()     
mscorwks.dll!79ef531b()     
mscorwks.dll!79ef6dd8()     
mscorwks.dll!79ef6e76()     
mscorwks.dll!79ef4755()     
ntdll.dll!7c9032a8()    
ntdll.dll!7c90327a()    
ntdll.dll!7c92a8c3()    
ntdll.dll!7c90e48a()    
ntdll.dll!7c917ca7()    
ntdll.dll!7c917e8f()    
mscorwks.dll!7a0ecb29()     
mscorwks.dll!79f6879a()     
mscorwks.dll!79f68780()     
mscorwks.dll!79f73f3d()     
mscorwks.dll!79ecd659()     
mscorwks.dll!79e71b4c()     
mscorwks.dll!79e821f9()     
mscorwks.dll!79e96571()     
mscorwks.dll!79e965a4()     
mscorwks.dll!79e965c2()     
mscorwks.dll!79f87ad3()     
mscorwks.dll!79f87c32()     
mscorlib.ni.dll!792d5428()  
mscorlib.ni.dll!792d51d6()  
mscorlib.ni.dll!792d50be()  
mscorwks.dll!79e71b4c()     
mscorwks.dll!79e821f9()     
mscorwks.dll!79e96571()     
mscorwks.dll!79e965a4()     
mscorwks.dll!79f29e09()     
mscorwks.dll!79f2a1e0()     
mscorwks.dll!79f2a130()     
mscorwks.dll!79f29837()     
mscorwks.dll!79f298bc()     
mscorwks.dll!79f29967()     
System.ni.dll!7a574b73()    
System.Windows.Forms.ni.dll!7b1c87be()  
mscorwks.dll!79e71b4c()     
mscorwks.dll!79e821f9()     
System.Windows.Forms.ni.dll!7b1c86a0()  
System.Windows.Forms.ni.dll!7b1c8621()  
System.Windows.Forms.ni.dll!7b6fa167()  
mscorwks.dll!79e71b4c()     
mscorwks.dll!79e821f9()     
mscorwks.dll!79fc1fe2()     
mscorwks.dll!79fc219a()     
mscorwks.dll!79fc22be()     
mscorwks.dll!79f077ad()     
mscorwks.dll!79e8c4ec()     
mscorwks.dll!79e8840b()     
mscorwks.dll!79f13cb5()     
mscorwks.dll!79f1129c()     
mscorwks.dll!79f07e17()     
mscoree.dll!7900b77b()  
mscoree.dll!7900b73d()  
mscoree.dll!79004de3()  
kernel32.dll!7c817077()     

我为 C++ DLL 创建了一个包装类。包装类基于库的头文件:

#ifndef _PDWAVEAPI_H__  
#define _PDWAVEAPI_H__

#ifdef PDWAVE_EXPORTS
#define PDWAVE_API __declspec(dllexport)
#else
#define PDWAVE_API __declspec(dllimport)
#endif

typedef struct {
   bool  bValid;
   float fPressure;
   float fDistance;
   float fVel[4];
   unsigned short nAmp[4];
 } PDWaveSample;

typedef struct {
    float fST[4096];
    float fWinFloor;
    float fWinCeil;
    bool bUseWindow;
    bool bSTOk;
    bool bGetRawAST;
    bool bValidBurst;
 } PDWaveBurst;


PDWAVE_API int __stdcall PDSetWaveSample(PDWaveSample *pWaveSample);
PDWAVE_API int __stdcall PDPreProcess(int nSample, PDWaveBurst *pWaveBurst);

C# 包装类是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices; // DllImport

namespace Cpp_LibraryApi
{
    [StructLayout(LayoutKind.Sequential)]
    public struct PDWaveSample
    {
        public bool bValid;                             
        public float fPressure;                         
        public float fDistance;                         
        public float[] fVel;
        public ushort[] nAmp

        // Constructor to initialize tables

        public static PDWaveSample Create()
        {
            PDWaveSample DataStruct = new PDWaveSample();
            DataStruct.fVel = new float[4];
            DataStruct.nAmp = new ushort[4];
            return DataStruct;
        }
    }
    [StructLayout(LayoutKind.Sequential)]
    public  struct PDWaveBurst {
        public float[] fST;
        public float fWinFloor;
        public float fWinCeil;
        public bool bUseWindow;
        public bool bSTOk;
        public bool bGetRawAST;
        public bool bValidBurst;

        public static PDWaveBurst Create()
        {
            PDWaveBurst DataStruct = new PDWaveBurst();
            DataStruct.fST = new float[Constants.PD_MAX_WAVEMEAS_AST];
            return DataStruct;
        }
    }

    public class Cpp_LibraryWrapper
    {
        [DllImport("cpp_library.dll")]
        public static extern int PDSetWaveSample(ref PDWaveSample pWaveSample);

        [DllImport("cpp_library.dll")]
        public static extern int PDPreProcess(int nSample, ref PDWaveBurst pWaveBurst);

    }
}

Windows 窗体应用程序按以下方式使用这些函数:

我稍微简化了功能。实际上,测量值是使用第三方 ActiveX 组件从串行线路读取的。

using System;
using System.Configuration;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Timers;
using System.Diagnostics;

namespace CalculationForm
{
    public partial class frmCalculationForm : Form
    {
        int nBurstSamples = 0;

        public frmCalculationForm()
        {
            InitializeComponent();
        }

        private void OnNewData_Event(object sender, Events_OnNewDataEvent e)
        {
            try
            {
                Cpp_LibraryApi.PDWaveSample WaveSampleData = Cpp_LibraryApi.PDWaveSample.Create();

                ReadWaveSample(ref WaveSampleData);
                SetWaveSample(WaveSampleData);

                if (++nBurstSamples > 512)
                {
                    // Process
                    ProcessBurstData(nBurstSamples);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message.ToString());
            }
        }

        public void ReadWaveSample(ref Cpp_LibraryApi.PDWaveSample WaveSampleData)
        {
            float[] dVel = new float[4] { (float)-3.26, (float)-2.808, (float)-3.651, (float)-3.43 };
            ushort[] usAmp = new ushort[4] { 41, 40, 0, 0 };
            WaveSampleData.bValid = true;
            WaveSampleData.fPressure = 12.432;
            WaveSampleData.fDistance = 2.64;
            WaveSampleData.fVel = dVel;
            WaveSampleData.nAmp = usAmp;
        }

        public void SetWaveSample(Cpp_LibraryApi.PDWaveSample WaveSampleData)
        {
            Cpp_LibraryWrapper.PDSetWaveSample(ref WaveSampleData);
        }

        public void ProcessBurstData(int nSamples)
        {
            try
            {
                Cpp_LibraryApi.PDWaveBurst WaveBurstData = Cpp_LibraryApi.PDWaveBurst.Create();

                WaveBurstData.fST = new float[4096];
                WaveBurstData.fWinFloor = (float)1.25;
                WaveBurstData.fWinCeil = 2;
                WaveBurstData.bUseWindow = false;
                WaveBurstData.bSTOk = false;
                WaveBurstData.bGetRawAST = false;
                WaveBurstData.bValidBurst = false;

                Cpp_LibraryWrapper.PDPreProcess(nSamples, ref WaveBurstData);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message.ToString());
            }
        }
    }
}

一切似乎都很顺利,直到程序进入测量处理阶段。什么时候

Cpp_LibraryWrapper.PDPreProcess(nSamples, ref WaveBurstData);

被调用时,执行会因以下错误而停止:

程序“XXX.vshost.exe:托管”已退出,代码为 -1073741819 (0xc0000005)。

我设置了这些调试选项:

  • 启用非托管代码调试
  • 启用 Visual Studio 托管进程
  • “抛出”公共语言运行时异常
  • Win32 异常 ->“抛出”访问冲突

您的结构编组不正确,因为您没有完全正确地声明数组。您需要告诉编组器它们是固定长度数组。

EDIT

在我原来的答案中,我错过了添加错误bool成员没有正确编组。默认编组适用于 4 字节 WindowsBOOL但你需要 1 字节 C++bool。下面的代码现在可以正确处理该问题。对困惑感到抱歉。

public struct PDWaveSample
{
    [MarshalAs(UnmanagedType.I1)]
    public bool bValid;                             
    public float fPressure;                         
    public float fDistance;                         
    [MarshalAs(UnmanagedType.LPArray, SizeConst=4)]
    public float[] fVel;
    [MarshalAs(UnmanagedType.LPArray, SizeConst=4)]
    public ushort[] nAmp
}

public struct PDWaveBurst {
    [MarshalAs(UnmanagedType.LPArray, SizeConst=4096)]
    public float[] fST;
    public float fWinFloor;
    public float fWinCeil;
    [MarshalAs(UnmanagedType.I1)]
    public bool bUseWindow;
    [MarshalAs(UnmanagedType.I1)]
    public bool bSTOk;
    [MarshalAs(UnmanagedType.I1)]
    public bool bGetRawAST;
    [MarshalAs(UnmanagedType.I1)]
    public bool bValidBurst;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C# 调用非托管 C++ 库 (dll) 会产生访问冲突错误 (0xc0000005) 的相关文章

随机推荐

  • 哪个 jar 最终出现在 Maven 增量构建中的类路径上?

    简单的 Maven 说明 我希望经验丰富的 Maven 开发人员能够轻松回答这个问题 我有两个名为 mycompany x 和 mycompany y 的项目 mycompany x 被列为 mycompany y 的依赖项 每个版本都有
  • React 6.4.0 所有路由器的通用标头

    我正在开始反应项目react router dom版本 6 4 0 但无法为所有路由创建公共标头 App js 这是我要添加的文件RouterProvider import logo from logo svg import App css
  • 使用PHP批量插入

    Java有PreparedStatement addBatch executeBatch来有效地进行多次插入 使用 php 的 mysqli 扩展进行批量插入的快速方法是什么 Thanks MySQL 本身支持一次查询多次插入 INSERT
  • 如何在 UIWebView 中静音播放 YouTube 视频?

    我正在使用 UIWebView 在 iPhone 版 iOS 9 上播放嵌入式 YouTube 视频 然而 由于一个已知问题 音量控制不起作用 即调用player mute 或player setVolume 0 根本不起作用 https
  • 有没有一种方法可以通过一个命令获取 git 根目录?

    Mercurial 有一种打印根目录 包含 hg 的方法 hg root git 中是否有等效的东西来获取包含 git 目录的目录 Yes git rev parse show toplevel 如果您想更直接地复制 Mercurial 命
  • MKOverlay 视图模糊

    我正在尝试使用 MKOverlayView 添加 png 图像作为自定义地图 我几乎就在那里 我能够将图像排列在正确的位置 并且我知道 MKOverlayView 子类中的 drawMapRect 方法正在被定期调用 我似乎无法正确渲染图像
  • cmd:将 wmic 输出保存到变量

    我正在尝试将文件的时间戳放入批处理文件中的变量中 我的批处理文件 imagetime bat 包含以下内容 set targetfile 1 set targetfile targetfile echo targetfile for f u
  • Windows Phone 8 LongListSelector 内的图像内存泄漏

    我有一个 LongListSelector 其中包含一个图像控件 该控件从网络加载大量图像 这在一段时间内工作正常 但在加载一些图像后 我出现内存不足异常 我读到其他人也有同样的问题 涉及大量图像内存不足 但仍然没有找到解决方案 我读到它与
  • Firebase 部署错误:构建失败:npm ERR!代码EUSAGE

    我目前正在使用 Firebase 托管 但突然遇到部署错误 我尝试了所有可能的解决方案 但部署错误多次出现 所以现在需要社区的帮助 请帮我解决这个问题 从这条线上部署过程失败 i functions updating Node js 16
  • 主源文件中的结构值未更新

    我的项目的一部分 一些源文件是button key h button key h lcd h mani c etc 在按钮 key H 中使用了一个结构并声明为 struct menu uint8 t Hour uint8 t Minute
  • 拦截列表总体以在反序列化中分配值

    我有一个递归类 树层次结构 它派生自一个列表 该列表具有子级及其自身 通过 JSON NET 中的反序列化填充 TLDR 版本是 我想在该类存在的每个级别上从父级填充子级中的变量 而不使用 JSON NET 中的 ref 变量 存储到 co
  • 如何从R中UNC指定的目录中读取文件?

    是否可以从 UNC 指定的目录中读取文件R 我想在不使用基本安装之外的任何软件包的情况下完成此操作 UNC 名称工作正常 您只需正确转义它们即可 这对我有用 read csv COMPUTER Directory file txt
  • 我如何在 QMake 中包含 python.h

    INCLUDEPATH L usr include python2 7 LIBS usr local lib python2 7 QMAKE CXXFLAGS usr local lib python2 7 error cannot fin
  • C++程序与MySQL数据库通信

    有谁知道 C 程序直接与 MySQL 数据库通信的简单方法吗 我查看了 MySQL 发现它非常令人困惑 如果有人知道一个非常简单的方法 请告诉我 Thanks 附 我正在 Windows 机器上进行开发 PHP 和 MySQL Web 应用
  • LINQ Intersect 不返回项目

    我已经为我的自定义类实现了一个比较类 以便我可以使用Intersect在两个列表中 StudentList1 and StudentList2 但是 当我运行以下代码时 我没有得到任何结果 Student class CompareStud
  • awk 要求合并两个文件

    我通过 AWK 命令使用 Same Key 组合了两个不同的文件 如果与 File1 和 File2 相比没有关键匹配 则只需 把 t t t 代替 我有以下 AWK 命令 awk F t key 1 NR 1 header key key
  • 为什么不能将 Dictionary> 转换为 Dictionary>?

    我想知道为什么我不能直接进行强制转换 我有一个模糊的想法 这可能与协 逆变的东西有关 我是否被迫按顺序将第一个字典的元素复制到新的字典中得到我想要的类型 你不能这样做 因为它们不是同一类型 考虑 var x new Dictionary
  • 不使用模式名称访问表

    我是 DB2 新手 如果不使用架构名称 我无法从表中获取数据 如果我使用带有表名的模式名称 我就可以获取数据 Example SELECT FROM TABLE NAME 它给了我错误 同时 SELECT FROM SCHEMA NAME
  • 如何在Python OpenCV中获取轮廓的x,y位置

    我试图从下图中获取轮廓的 x 和 y 位置 但我搞砸了 图片 我只需要找到轮廓的 x 和 y 位置或轮廓的中心 当我从 GIMP 手动查找它们的位置时 结果将类似于以下内容 290 210 982 190 570 478 我相信可以用 cv
  • 从 C# 调用非托管 C++ 库 (dll) 会产生访问冲突错误 (0xc0000005)

    抱歉问了这么长的问题 我只是想包括我目前所知道的有关该问题的所有信息 我正在使用 Visual Studio 2008 用 C 创建一个 Windows 窗体程序 该程序调用用 C 编写的库 C DLL 分析由多个样本组成的测量数据 样本通