你必须使用一个DLL。 在Java中我们使用:
Public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary("are32.dll",
CLibrary.class);
Pointer ENCRYPT(String a, int ai, String b, int bi);
}
...
Pointer ptr1 = CLibrary.INSTANCE.ENCRYPT("TEST",5,"TEST",5);
for (int i=0;i<6;i++)
System.out.println((ptr1.getByte(i)& 0xFF));
你能帮我找一下C#中的等价物吗? 我使用IntPtr但是找不到像Java这样的ReadByte。
[DllImport("are32.dll",)]
public static extern IntPtr ENCRYPT(string p1, int p2, string p3, int p4);
...
var retPtr = ENCRYPT("TEST", 5, "TEST", 5);
我如何ReadByte
来自retPtr
? IntPtr
是否等于Pointer
?
感谢您的帮助
答案 0 :(得分:2)
使用
byte b = System.Runtime.InteropServices.Marshal.ReadByte(retPtr);
您也可以通过一次调用填充5字节数组:
const int arrSize = 5;
byte[] arr = new byte[arrSize];
System.Runtime.InteropServices.Marshal.Copy(retPtr, arr, 0, arrSize);