2010-02-24 54 views
0

我正在將一個用C編寫的WinCE 5.0中的DLL移植到ARM目標上的WinCE 6.0中。這個DLL由.NET軟件調用。在WinCE5.0上,一切運行良好。在WINCE6,我有以下問題:我的DLL的WinCE 6.0上的.NET和C之間的堆棧調用約定

  • 上的InitInstance(),我可以調用沒有任何問題(例如消息框()),或者使用遞歸性。

  • 通過這一點,該DLL由.NET代碼調用。然後它失敗了:即使通過.NET代碼傳遞的參數看起來很奇怪。我可以調用MessageBox()一次,但我不能調用調用MessageBox()的函數,然後調用它自己:遞歸性被破壞。

看來,.NET代碼以不同於我的C代碼的方式使用堆棧。

我對Windows世界非常陌生,給我.NET應用程序的公司不明白爲什麼會出現這樣的失敗。

任何指針/提示/建議歡迎!

謝謝!

+0

爲Compact Framework設計的.Net程序集?你有兩個設備上安裝的相同版本的緊湊框架? – 2010-02-24 16:12:31

回答

0

看起來,調用約定在EV4/WinCE5上編譯並由某些.NET代碼調用的DLL和爲VS2008/WinCE6編譯的相同DLL之間的某個點發生了變化。現在我的DLL收到一個指向寬字符而不是對象的指針......條件編譯解決了我的問題,而我希望從某些官方文檔中獲得「真實」解釋。無論如何,這件事現在已經解決了。