2011-06-03 72 views
11

如果輸入參數是字節數組byte - [byte],則dll中的本地方法在java中工作。 如果我們使用來自c#的相同方法,它將引發EntryPointNotFoundException。是與C#字節相同的java字節嗎?

是因爲字節[]在Java和C#是不同的東西?如果是這樣,我應該如何使用C#的本地功能?

+0

是C#sbyte是否與java字節相同? – Sergey 2011-06-03 05:12:31

+0

是的,它們都是以8位寬度進行簽名的,範圍在-128到127之間 – evilone 2011-06-03 05:15:02

回答

13

的Java缺乏無符號類型。特別是,Java沒有一個無符號字節的基本類型。 Java字節類型是有符號的,而C#字節是無符號的,而sbyte是有符號的。

+1

有趣的是,'char'(有些可能會說'bool')是一個無符號類型;-)但是,是的。非常真實。 – 2011-06-03 05:02:05

6

是因爲在java和c#中的byte []是不同的東西嗎?

是。

  • 字節序:的Java商店內部的事情作爲大端,而.NET是小端默認。
  • 符號性: C#字節是無符號的。 Java字節被簽名。

請參閱different results when converting int to byte array - .NET vs Java

+9

呃...... *字節*有永久性? – 2011-06-03 05:01:14

+1

恩,你是對的 - 會解決的。睡覺的時間... – 2011-06-03 05:02:39

+1

首先,@ pst是正確的,字節沒有字節順序(按照定義)。第二,僅當數據序列化時才能注意到字節順序。在JNI/JNA中,endianness與執行平臺相同。 – 2011-06-03 05:04:12

2

什麼是原生功能的簽名?你如何在Java和C#中聲明它?

EntryPointNotFoundException的最常見的原因是,函數名錯位(特別是如果爲真功能是用C++)或拼寫錯誤。

的問題的另一種來源是「W」和「A」爲用於區分的功能ANSI和Unicode版本WinAPI的功能後綴。 .NET互操作機制可以嘗試猜測功能後綴,這樣可能是混亂的根源,