Java指针与C#IntPtr

时间:2010-09-10 09:55:43

标签: c#

你必须使用一个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来自retPtrIntPtr是否等于Pointer

感谢您的帮助

1 个答案:

答案 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);