Соглашение о вызове стека между .NET & C на WinCE 6.0 - PullRequest
0 голосов
/ 24 февраля 2010

Я портирую DLL, написанную на C, из WinCE 5.0 в WinCE 6.0 на ARM target. Эта DLL вызывается программным обеспечением .NET. На WinCE5.0 все работает нормально. На WinCE6 у меня есть следующая проблема:

  • в InitInstance () моей DLL, я могу вызывать что угодно без проблем (например, MessageBox ()) или использует рекурсивность.

  • Пройдя эту точку, DLL вызывается кодом .NET. И тогда это терпит неудачу: даже аргументы, передаваемые кодом .NET, кажутся странными. Я могу вызвать MessageBox () один раз, но не могу вызвать функцию, которая вызывает MessageBox (), а затем сама вызывает: рекурсивность нарушена.

Кажется, что .NET-код использует стек не так, как мой код на C.

Я очень не знаком с миром Windows, и компания, которая предоставляет мне приложение .NET, пока не понимает, почему происходит такой сбой.

Любой указатель / подсказка / совет приветствуется!

Спасибо!

1 Ответ

0 голосов
/ 08 марта 2010

Что ж, похоже, что соглашение о вызовах изменилось в какой-то момент, между DLL, скомпилированной на EV4 / WinCE5 и вызванной некоторым кодом .NET, и той же DLL, скомпилированной для VS2008 / WinCE6. Теперь моя DLL получает указатель на широкие символы вместо объекта ... Условная компиляция решила мою проблему, в то время как я хотел бы получить «реальное» объяснение из какого-то официального документа. Во всяком случае, сейчас дело решено.

...