簡體   English   中英

僅在調試時才發生System.ExecutionEngineException

[英]System.ExecutionEngineException only when debugging

我是C ++開發人員,所以我對C#沒有太多經驗,但是無論如何,我都必須解決此問題。

有一個使用某些C ++ DLL的C#GUI。 從DLL之一調用方法之一時,會發生System.ExecutionEngineException。 顯然,我無法進入C ++代碼以查看此代碼是否存在問題。 因此,我構建了一個小型C ++測試應用程序,該應用程序運行良好。 在C#代碼中使用該方法調用的參數對我來說也很好(在我的C ++測試應用程序中使用了相同的值)。 盡管在GUI某處存在一個問題,該問題可能與此問題相關,也可能不相關,但是在沒有Visual Studio的情況下啟動的同一可執行文件也可以正常工作。

我目前不知道如何找出導致問題的原因。 任何提示將不勝感激。

用C#代碼調用caseID為int類型,paramID為System.Int32類型,paramData為自定義結構的方法。

getParameter(caseID, dataID, paramID, ref paramData)

C#代碼中方法的簽名如下所示:

[ DllImport ("helper.dll", CallingConvention=CallingConvention.Cdecl/*, CharSet = CharSet.Auto*/ )]
public static extern ERROR getParameter(System.Int32 caseID, System.Int32 dataID, System.Int32 paramID, ref PARAMETER_DATA data);

C ++ DLL中相應方法的簽名如下所示:

ERROR _stdcall getParameter(const long caseID, const long dataID, long number, PARAMETER_DATA *data);

在我看來,奇怪的是,C ++代碼明確聲明應使用調用約定“ stdcall”來調用該方法,而C#代碼要使用Cdecl。 但是,這段代碼似乎已經工作了很長時間了。 我還嘗試將兩種調用約定都更改為stdcall,但這也不起作用。

問題是在C ++中為char []的struct成員更改了其大小。 在C#代碼中有此屬性

[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=11)]

因此,我不得不更改SizeConst屬性的值。 不知道為什么當我第一次檢查結構差異時為什么沒有看到這個...

我還解決了調用約定問題,現在一切似乎都正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM