如果输入参数是字节数组 - byte [],则dll中的native方法适用于java。 如果我们在c#中使用相同的方法,则抛出EntryPointNotFoundException。
是因为java和c#中的byte []是不同的东西?如果是这样我应该如何使用c#中的原生函数?
答案 0 :(得分:14)
Java缺少无符号类型。特别是,Java缺少无符号字节的基本类型。 Java字节类型是有符号的,而C#字节是无符号的,sbyte是有符号的。
答案 1 :(得分:6)
这是因为java和c#中的byte []是不同的东西吗?
是
请参阅different results when converting int to byte array - .NET vs Java。
答案 2 :(得分:2)
原生功能的签名是什么?你如何在Java和C#中声明它?
EntryPointNotFoundException
最常见的原因是函数名被破坏(例如,如果函数是用C ++编写的,则为true)或拼写错误。
另一个问题来源是用于区分ANSI和Unicode版本函数的WinAPI函数的'W'和'A'后缀。 .NET互操作机制可以尝试猜测函数后缀,这可能是混淆的来源,
答案 3 :(得分:0)
Java字节:
java字节:字节数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(含)。字节数据类型对于在大数组中节省内存非常有用,因为内存节省实际上很重要。在限制可以帮助您澄清代码的地方,也可以使用它们来代替int。变量范围有限的事实可以作为一种文档形式。
C#字节
Byte表示一个8位无符号整数,Byte是一个不可变的值类型,它表示无符号整数,其值的范围从0(由Byte.MinValue常数表示)到255(由Byte.MaxValue表示)不变)。 .NET Framework还包括一个带符号的8位整数值类型SByte,它表示范围从-128到127的值。