引發類型為“System.ExecutionEngineException”的異常

來源:互聯網
上載者:User

昨天調試函數時出現這個問題

引發類型為“System.ExecutionEngineException”的異常。

函數原型為:

      public struct CDMLASTDISPENSE
        {
            public byte last_cmd;       // Command last sent
            public byte last_error_cd;  //Error code last occurred
            public byte last_cbx;       //Cassette box last operated
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] last_dispense_count;   //Dispensed count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] last_divert_count;     //Diverted count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] last_pick_count;        //Pick count
        }
      
        [DllImport("FlCommCDM.dll", EntryPoint = "FlCommCDM_LastDispense", CharSet = CharSet.Ansi)]
        public static extern int FlCommCDM_LastDispense(ref CDMLASTDISPENSE lpResult);

調用該函數,起初調試都是成功的。結果突然電腦反應很慢,死住了,然後我強制結束程式,之後,再啟動調試報該錯。轉成release

報錯.runtime正在等待內部反應,

反正就是死活不行了。開始查是殺毒軟體的錯,然後卸了沒用。又說是系統.net受到破壞。

為此查詢了\ MSCOREE是託管程式的進入點

重新安裝了.net2.0 使用 windows clean up 卸載重新安裝了.net 2.0

還是不行。

最後仍是錯誤

點擊後程式報錯:
運行時遇到了錯誤。此錯誤的地址為 0x791c7b88,線上程 0x1194 上。錯誤碼為 0xc0000005。此錯誤可能是 CLR 中的 bug,或者是使用者代碼的不安全部分或不可驗證部分中的 bug。此 bug 的常見來源包括使用者對 COM-interop 或 PInvoke 的封送處理錯誤,這些錯誤可能會損壞堆棧
引發類型為“System.ExecutionEngineException”的異常

最後查出是byte[]的長度聲明有問題,隨改為:

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] last_dispense_count;   //Dispensed count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] last_divert_count;     //Diverted count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] last_pick_count;        //Pick count

已經解決,是長度引起的。

但原來為什麼沒有出錯,一直可以,是因為byte[]起初返回的值可以區分,當不能填滿第一個byte時,後面的byte【】

就無法填裝了。所以如果是最後一個byte【】資料長度不足也可以返回,但後面還跟有byte【】時,資料位元就不對整了

因此,會引發無法預知的錯誤。


過程收穫:.net2.0安裝容易,卸載很難。重裝需要安裝微軟協助裡使用window clean up 刪除檔案和註冊表。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.