2010-03-02 374 views
2

我不知道爲什麼,但今天myOpenID似乎不起作用。無論如何...我有這個問題:我有一個非託管C++庫(DLL),我必須將其嵌入到現有的C#項目中。現在...我在託管的C++中創建了一個迷你包裝器(DLL),它調用庫以便我可以從C#代碼加載它,當我從命令行C#項目中嘗試它時,它完美地工作,正確結果,正確的行爲ecc。從C#調用C++時發生System.AccessViolationException異常#

現在,當我加載它在真實的項目中,它開始給我奇怪的System.AccessViolationException來自迷你包裝DLL。我沒有經驗的C#,也沒有在Windows下的一般的管理/非託管C++開發,我只是不明白爲什麼這應該從C#項目,而不是從另一個工作。

更多信息:原始庫使用OGRE3D渲染引擎進行計算,而我必須使用該庫的項目在引擎蓋下使用OGRE,這會導致問題嗎?

有什麼建議嗎?

+0

真正的項目是否意味着另一臺機器?我的意思是,你是否嘗試在不同的環境中使用你的dll? – 2010-03-02 11:46:44

+0

不同的C#項目,但同一臺機器。 – tunnuz 2010-03-04 11:19:13

回答

1

這裏有一些想法,您可以嘗試先生......

  1. 很難知道怎麼回事準確,但我會嘗試做的第一件事就是刪除此託管C++ DLL從混合。這可能是令人困惑的事情。這裏的某個地方感覺就像管理和非管理世界之間的數據沒有被正確編組。另外,僅僅因爲它不會從控制檯崩潰,並不意味着代碼工作正常,它仍然可能會破壞,只是不會觸發訪問衝突。我想看看是用對的第一件事/調用,直接打電話給你的非託管的DLL,如果它打破了,你應該知道很快:

    Calling Win32 DLLs in C# with P/Invoke

  2. 這可能是在混合的某個地方,這個指針正在被移動到一個不同的地址空間,該指針是沒有意義的。這裏有沒有進程邊界?

相關問題