我正在将一个用C编写的DLL从WinCE 5.0移植到ARM目标上的WinCE 6.0。此DLL由.NET软件调用。在WinCE5.0上,一切运行正常。在WinCE6上,我有以下问题:
在我的DLL的InitInstance()上,我可以调用任何没有问题的东西(例如MessageBox())或使用递归。
通过这一点,DLL由.NET代码调用。然后它失败了:即使.NET代码传递的参数看起来也很奇怪。我可以调用MessageBox()一次,但我不能调用一个调用MessageBox()的函数然后调用它自己:递归被破坏了。
似乎.NET代码以与我的C代码不同的方式使用堆栈。
我对Windows世界非常不满意,给我.NET应用程序的公司还不明白为什么会出现这样的错误。
任何指针/提示/建议欢迎!
谢谢!
答案 0 :(得分:0)
看起来调用约定在某些时候发生了变化,在EV4 / WinCE5上编译的DLL和某些.NET代码调用的DLL之间,以及为VS2008 / WinCE6编译的相同DLL。现在我的DLL收到一个指向宽字符而不是对象的指针...条件编译解决了我的问题,而我希望从某些官方文档中获得“真正的”解释。无论如何,这件事现在已经解决了。