0

我正在将一个用 C 语言编写的 DLL 从 WinCE 5.0 移植到 ARM 目标上的 WinCE 6.0。此 DLL 由 .NET 软件调用。在 WinCE5.0 上,一切运行良好。在 WinCE6 上,我有以下问题:

  • 在我的 DLL 的 InitInstance() 上,我可以毫无问题地调用任何东西(例如 MessageBox())或使用递归。

  • 过了这一点,.NET 代码调用 DLL。然后它失败了:即使是 .NET 代码传递的参数也看起来很奇怪。我可以调用 MessageBox() 一次,但我不能调用调用 MessageBox() 然后调用自身的函数:递归性被破坏。

似乎 .NET 代码使用堆栈的方式与我的 C 代码不同。

我对 Windows 世界非常陌生,为我提供 .NET 应用程序的公司还不明白为什么会出现这样的失败。

欢迎任何指针/提示/建议!

谢谢!

4

1 回答 1

0

好吧,调用约定似乎在某些时候发生了变化,在 EV4/WinCE5 上编译并由某些 .NET 代码调用的 DLL 与为 VS2008/WinCE6 编译的相同 DLL 之间。现在我的 DLL 接收到指向宽字符而不是对象的指针......条件编译解决了我的问题,而我希望从一些官方文档中获得“真实”的解释。无论如何,这件事现在已经解决了。

于 2010-03-08T10:47:17.280 回答