Re: [問題] Wrapper Class for Unmanaged Code的Di …

看板C_Sharp作者時間16年前 (2008/02/02 00:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ 引述《sedc (大招出盡)》之銘言: : 我用C++/CLI寫了個Wrapper Class來包裝一個C++的CLASS C,大致如下: : public ref class MgdC : { : public: : MgdC(); : ~MgdC(); : protected: : !MgdC(); : private: : C* m_pC; : }; : 其中 ~MgdC()的內容是 : ~MgdC() : { : if(m_pC!= NULL) : delete m_pC; : } : 最後編出來dll檔後,~MgdC()則會變成Dispose() : 但是我在C#的CODE中呼叫Mgd.Dispose()時,會發生Access Violation Exception, : 說「嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。」 : 用google查了一下,會發生Access Violation Exception的類似情況好像都是沒有實作 : Dispose(),但是到了C++/CLI後應該是不需要再另外實作了吧,因為Compiler會幫它編出 : 一個Dispose()來呼叫~MgdC()或!MgdC()。 所以目前還是不知道問題出在哪裡,還請板 : 上的高手前輩們能解答 感激不盡 謝謝 實在是看不懂@@ 你都知道~MgdC()就是Dispose() 那怎麼會說不需要再另外實作Dispose() @@ ~MgdC()在C#是Finalizer, 而在C++/CLI正是Dispose() Access Violation Exception應該很容易理解, 就是不合法的記憶體存取, 而不是沒有實作Dispose(). 事實上在C++/CLI寫wrapper class 不實作Dispose pattern等於是完蛋. 所以問題出在其他地方, 也許是你不小心刪了物件兩次? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.170.18
文章代碼(AID): #17eqOl6f (C_Sharp)