байт Java такой же, как байт C #? - PullRequest
12 голосов
/ 03 июня 2011

Нативный метод из dll работает в java, если входным параметром является массив байтов - byte [].Если мы используем тот же метод из c #, он генерирует EntryPointNotFoundException.

Это из-за того, что byte [] в java и c # - разные вещи?и если это так, как я должен использовать нативную функцию из C #?

Ответы [ 3 ]

14 голосов
/ 03 июня 2011

В Java нет неподписанных типов. В частности, в Java отсутствует примитивный тип для байта без знака. Тип байта Java подписан, а байт C # - без знака, а sbyte подписан.

6 голосов
/ 03 июня 2011

Это из-за байта [] в java и c # разные вещи?

Да.

  • Порядковый номер: Javaхранит вещи внутренне как Big Endian, тогда как .NET по умолчанию является Little Endian.
  • Подпись: C # байты не подписаны.Java-байты подписаны.

См. различные результаты при преобразовании int в байтовый массив - .NET против Java .

2 голосов
/ 03 июня 2011

Какая подпись родной функции? Как вы объявите это в Java и в C #?

Самая распространенная причина EntryPointNotFoundException заключается в том, что имя функции искажено (особенно, если функция написана на C ++) или написано с ошибкой.

Другим источником проблемы являются суффиксы 'W' и 'A' для функции WinAPI, используемые для различения версий функций ANSI и Unicode. Механизм взаимодействия .NET может попытаться угадать суффикс функции, что может привести к путанице,

...